diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadSbStatTask.java b/src/com/szpg/task/ReadSbStatTask.java new file mode 100644 index 0000000..5c7c518 --- /dev/null +++ b/src/com/szpg/task/ReadSbStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadSbStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadSbStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadSbStatTask.java b/src/com/szpg/task/ReadSbStatTask.java new file mode 100644 index 0000000..5c7c518 --- /dev/null +++ b/src/com/szpg/task/ReadSbStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadSbStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadSbStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadWSStatusTask.java b/src/com/szpg/task/ReadWSStatusTask.java index 4c33e98..608c978 100644 --- a/src/com/szpg/task/ReadWSStatusTask.java +++ b/src/com/szpg/task/ReadWSStatusTask.java @@ -1,47 +1,48 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadWSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadWSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSStatusTask() { + service = new ReadSensorStatusService(); } - + @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取温湿度参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadWSStatusCommand wsAlmCmd = (ReadWSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsAlmCmd.getCommandType()); - cmd.setDest(wsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsAlmCmd.getCountWord()); - cmd.setCount_bit(wsAlmCmd.getCountBit()); - cmd.setCount_sensor(wsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadSbStatTask.java b/src/com/szpg/task/ReadSbStatTask.java new file mode 100644 index 0000000..5c7c518 --- /dev/null +++ b/src/com/szpg/task/ReadSbStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadSbStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadSbStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadWSStatusTask.java b/src/com/szpg/task/ReadWSStatusTask.java index 4c33e98..608c978 100644 --- a/src/com/szpg/task/ReadWSStatusTask.java +++ b/src/com/szpg/task/ReadWSStatusTask.java @@ -1,47 +1,48 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadWSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadWSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSStatusTask() { + service = new ReadSensorStatusService(); } - + @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取温湿度参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadWSStatusCommand wsAlmCmd = (ReadWSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsAlmCmd.getCommandType()); - cmd.setDest(wsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsAlmCmd.getCountWord()); - cmd.setCount_bit(wsAlmCmd.getCountBit()); - cmd.setCount_sensor(wsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadWSValueTask.java b/src/com/szpg/task/ReadWSValueTask.java index 386b493..3a34dec 100644 --- a/src/com/szpg/task/ReadWSValueTask.java +++ b/src/com/szpg/task/ReadWSValueTask.java @@ -1,48 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadWSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadWSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadWSValueCommand wsCmd = (ReadWSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsCmd.getCommandType()); - cmd.setDest(wsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsCmd.getCountWord()); - cmd.setCount_bit(wsCmd.getCountBit()); - cmd.setCount_sensor(wsCmd.getCountSensor()); - cmd.setOffset(wsCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadSbStatTask.java b/src/com/szpg/task/ReadSbStatTask.java new file mode 100644 index 0000000..5c7c518 --- /dev/null +++ b/src/com/szpg/task/ReadSbStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadSbStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadSbStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadWSStatusTask.java b/src/com/szpg/task/ReadWSStatusTask.java index 4c33e98..608c978 100644 --- a/src/com/szpg/task/ReadWSStatusTask.java +++ b/src/com/szpg/task/ReadWSStatusTask.java @@ -1,47 +1,48 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadWSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadWSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSStatusTask() { + service = new ReadSensorStatusService(); } - + @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取温湿度参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadWSStatusCommand wsAlmCmd = (ReadWSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsAlmCmd.getCommandType()); - cmd.setDest(wsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsAlmCmd.getCountWord()); - cmd.setCount_bit(wsAlmCmd.getCountBit()); - cmd.setCount_sensor(wsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadWSValueTask.java b/src/com/szpg/task/ReadWSValueTask.java index 386b493..3a34dec 100644 --- a/src/com/szpg/task/ReadWSValueTask.java +++ b/src/com/szpg/task/ReadWSValueTask.java @@ -1,48 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadWSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadWSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadWSValueCommand wsCmd = (ReadWSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsCmd.getCommandType()); - cmd.setDest(wsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsCmd.getCountWord()); - cmd.setCount_bit(wsCmd.getCountBit()); - cmd.setCount_sensor(wsCmd.getCountSensor()); - cmd.setOffset(wsCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadYWStatusTask.java b/src/com/szpg/task/ReadYWStatusTask.java index f6a733c..36b2952 100644 --- a/src/com/szpg/task/ReadYWStatusTask.java +++ b/src/com/szpg/task/ReadYWStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadYWStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadYWStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadYWStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadControllerStatusService service; + + public ReadYWStatusTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取爆管液位参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadYWStatusCommand ywAlmCmd = (ReadYWStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ywAlmCmd.getCommandType()); - cmd.setDest(ywAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ywAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ywAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ywAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ywAlmCmd.getCountWord()); - cmd.setCount_bit(ywAlmCmd.getCountBit()); - cmd.setCount_sensor(ywAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构造命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YW.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadSbStatTask.java b/src/com/szpg/task/ReadSbStatTask.java new file mode 100644 index 0000000..5c7c518 --- /dev/null +++ b/src/com/szpg/task/ReadSbStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadSbStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadSbStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadWSStatusTask.java b/src/com/szpg/task/ReadWSStatusTask.java index 4c33e98..608c978 100644 --- a/src/com/szpg/task/ReadWSStatusTask.java +++ b/src/com/szpg/task/ReadWSStatusTask.java @@ -1,47 +1,48 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadWSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadWSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSStatusTask() { + service = new ReadSensorStatusService(); } - + @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取温湿度参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadWSStatusCommand wsAlmCmd = (ReadWSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsAlmCmd.getCommandType()); - cmd.setDest(wsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsAlmCmd.getCountWord()); - cmd.setCount_bit(wsAlmCmd.getCountBit()); - cmd.setCount_sensor(wsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadWSValueTask.java b/src/com/szpg/task/ReadWSValueTask.java index 386b493..3a34dec 100644 --- a/src/com/szpg/task/ReadWSValueTask.java +++ b/src/com/szpg/task/ReadWSValueTask.java @@ -1,48 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadWSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadWSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadWSValueCommand wsCmd = (ReadWSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsCmd.getCommandType()); - cmd.setDest(wsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsCmd.getCountWord()); - cmd.setCount_bit(wsCmd.getCountBit()); - cmd.setCount_sensor(wsCmd.getCountSensor()); - cmd.setOffset(wsCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadYWStatusTask.java b/src/com/szpg/task/ReadYWStatusTask.java index f6a733c..36b2952 100644 --- a/src/com/szpg/task/ReadYWStatusTask.java +++ b/src/com/szpg/task/ReadYWStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadYWStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadYWStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadYWStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadControllerStatusService service; + + public ReadYWStatusTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取爆管液位参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadYWStatusCommand ywAlmCmd = (ReadYWStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ywAlmCmd.getCommandType()); - cmd.setDest(ywAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ywAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ywAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ywAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ywAlmCmd.getCountWord()); - cmd.setCount_bit(ywAlmCmd.getCountBit()); - cmd.setCount_sensor(ywAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构造命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YW.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadZmRtTask.java b/src/com/szpg/task/ReadZmRtTask.java new file mode 100644 index 0000000..881b7cb --- /dev/null +++ b/src/com/szpg/task/ReadZmRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadZmRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadZmRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READZMRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZM.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadSbStatTask.java b/src/com/szpg/task/ReadSbStatTask.java new file mode 100644 index 0000000..5c7c518 --- /dev/null +++ b/src/com/szpg/task/ReadSbStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadSbStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadSbStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadWSStatusTask.java b/src/com/szpg/task/ReadWSStatusTask.java index 4c33e98..608c978 100644 --- a/src/com/szpg/task/ReadWSStatusTask.java +++ b/src/com/szpg/task/ReadWSStatusTask.java @@ -1,47 +1,48 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadWSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadWSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSStatusTask() { + service = new ReadSensorStatusService(); } - + @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取温湿度参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadWSStatusCommand wsAlmCmd = (ReadWSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsAlmCmd.getCommandType()); - cmd.setDest(wsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsAlmCmd.getCountWord()); - cmd.setCount_bit(wsAlmCmd.getCountBit()); - cmd.setCount_sensor(wsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadWSValueTask.java b/src/com/szpg/task/ReadWSValueTask.java index 386b493..3a34dec 100644 --- a/src/com/szpg/task/ReadWSValueTask.java +++ b/src/com/szpg/task/ReadWSValueTask.java @@ -1,48 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadWSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadWSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadWSValueCommand wsCmd = (ReadWSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsCmd.getCommandType()); - cmd.setDest(wsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsCmd.getCountWord()); - cmd.setCount_bit(wsCmd.getCountBit()); - cmd.setCount_sensor(wsCmd.getCountSensor()); - cmd.setOffset(wsCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadYWStatusTask.java b/src/com/szpg/task/ReadYWStatusTask.java index f6a733c..36b2952 100644 --- a/src/com/szpg/task/ReadYWStatusTask.java +++ b/src/com/szpg/task/ReadYWStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadYWStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadYWStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadYWStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadControllerStatusService service; + + public ReadYWStatusTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取爆管液位参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadYWStatusCommand ywAlmCmd = (ReadYWStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ywAlmCmd.getCommandType()); - cmd.setDest(ywAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ywAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ywAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ywAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ywAlmCmd.getCountWord()); - cmd.setCount_bit(ywAlmCmd.getCountBit()); - cmd.setCount_sensor(ywAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构造命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YW.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadZmRtTask.java b/src/com/szpg/task/ReadZmRtTask.java new file mode 100644 index 0000000..881b7cb --- /dev/null +++ b/src/com/szpg/task/ReadZmRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadZmRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadZmRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READZMRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZM.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadZmStatTask.java b/src/com/szpg/task/ReadZmStatTask.java new file mode 100644 index 0000000..540d3b8 --- /dev/null +++ b/src/com/szpg/task/ReadZmStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadZmStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadZmStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READZMSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZM.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index 0a3e805..85e2c37 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -3,100 +3,131 @@ ######## YXL.ACU001 ######## #\u7532\u70f7\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CH.COUNT = 6 +#\u7532\u70f7\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CH.ZC.LIST = YXL.ACU001.DCH01;YXL.ACU001.DCH02;YXL.ACU001.SCH01;YXL.ACU001.SCH02;YXL.ACU001.RCH01;YXL.ACU001.RCH02 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CH.START = 0300 +YXL.ACU001.CH.START = 300 #\u7532\u70f7\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CH.WORDCOUNT = 24 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CHALM.START = 0026 +YXL.ACU001.CHALM.START = 26 #\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.CHALM.WORDCOUNT = 1 -#\u7532\u70f7\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.CHALM.BITCOUNT = 12 -#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.WS.COUNT = 6 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WD.START = 0400 -#(450-424)*2 = 52 -YXL.ACU001.SD.OFFSET = 52 -#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 -YXL.ACU001.WS.WORDCOUNT = 74 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.WSALM.START = 0030 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.WSALM.WORDCOUNT = 3 -#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.WSALM.BITCOUNT = 12 #\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.CO.COUNT = 6 +#\u4e00\u6c27\u5316\u78b3\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.CO.ZC.LIST = YXL.ACU001.DCO01;YXL.ACU001.DCO02;YXL.ACU001.SCO01;YXL.ACU001.SCO02;YXL.ACU001.RCO01;YXL.ACU001.RCO02 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.CO.START = 0550 +YXL.ACU001.CO.START = 550 #\u4e00\u6c27\u5316\u78b3\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.CO.WORDCOUNT = 24 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.COALM.START = 0036 +YXL.ACU001.COALM.START = 36 #\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.COALM.WORDCOUNT = 1 -#\u4e00\u6c27\u5316\u78b3\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.COALM.BITCOUNT = 12 + + +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u6570\u91cf +YXL.ACU001.WS.COUNT = 6 +#\u6e29\u6e7f\u5ea6\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.WS.ZC.LIST = YXL.ACU001.DWS01;YXL.ACU001.DWS02;YXL.ACU001.SWS01;YXL.ACU001.SWS02;YXL.ACU001.RWS01;YXL.ACU001.RWS02 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WS.START = 400 +#\u6e29\u6e7f\u5ea6\u76d1\u6d4b\u503c\u6240\u5360\u5b57\u6570 +YXL.ACU001.WS.WORDCOUNT = 74 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.WSALM.START = 30 +#\u6e29\u6e7f\u5ea6\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.WSALM.WORDCOUNT = 3 + #\u6c27\u6c14\u4f20\u611f\u5668\u6570\u91cf -YXL.ACU001.O2.COUNT = 6 +YXL.ACU001.YQ.COUNT = 6 +#\u6c27\u6c14\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YQ.ZC.LIST = YXL.ACU001.DYQ01;YXL.ACU001.DYQ02;YXL.ACU001.SYQ01;YXL.ACU001.SYQ02;YXL.ACU001.RYQ01;YXL.ACU001.RYQ02 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2.START = 0500 +YXL.ACU001.YQ.START = 500 #\u6c27\u6c14\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2.WORDCOUNT = 4 +YXL.ACU001.YQ.WORDCOUNT = 24 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.O2ALM.START = 0036 +YXL.ACU001.YQALM.START = 34 #\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 -YXL.ACU001.O2ALM.WORDCOUNT = 1 -#\u6c27\u6c14\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.O2ALM.BITCOUNT = 12 +YXL.ACU001.YQALM.WORDCOUNT = 1 + #\u786b\u5316\u6c22\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.HS.COUNT = 6 +#\u786b\u5316\u6c22\u4f20\u611f\u5668\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.HS.ZC.LIST = YXL.ACU001.DHS01;YXL.ACU001.DHS02;YXL.ACU001.SHS01;YXL.ACU001.SHS02;YXL.ACU001.RHS01;YXL.ACU001.RHS02 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HS.START = 0350 +YXL.ACU001.HS.START = 350 #\u786b\u5316\u6c22\u6d53\u5ea6\u53c2\u6570\u6240\u5360\u5b57\u6570 YXL.ACU001.HS.WORDCOUNT = 24 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.HSALM.START = 0028 +YXL.ACU001.HSALM.START = 28 #\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.HSALM.WORDCOUNT = 1 -#\u786b\u5316\u6c22\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.HSALM.BITCOUNT = 12 + #\u7206\u7ba1\u6db2\u4f4d\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.YW.COUNT = 2 +#\u7206\u7ba1\u6db2\u4f4d\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.YW.ZC.LIST = YXL.ACU001.SYW01;YXL.ACU001.RYW01 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.YWALM.START = 0025 +YXL.ACU001.YWALM.START = 25 #\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.YWALM.WORDCOUNT = 1 -#\u7206\u7ba1\u6db2\u4f4d\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.YWALM.BITCOUNT = 2 + #\u5bf9\u5c04\u4f20\u611f\u5668\u6570\u91cf YXL.ACU001.DS.COUNT = 15 +#\u65e0\u7ebf\u5bf9\u5c04\u8bbe\u5907\u7f16\u7801\u5217\u8868 +YXL.ACU001.DS.ZC.LIST = YXL.ACU001.DIR01;YXL.ACU001.DIR02;YXL.ACU001.DIR03;YXL.ACU001.DIR04;YXL.ACU001.DIR05;YXL.ACU001.SIR01;YXL.ACU001.SIR02;YXL.ACU001.SIR03;YXL.ACU001.SIR04;YXL.ACU001.SIR05;YXL.ACU001.RIR01;YXL.ACU001.RIR02;YXL.ACU001.RIR03;YXL.ACU001.RIR04;YXL.ACU001.RIR05 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.DSALM.START = 0038 +YXL.ACU001.DSALM.START = 38 #\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.DSALM.WORDCOUNT = 3 -#\u5bf9\u5c04\u62a5\u8b66\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.DSALM.BITCOUNT = 45 + #\u98ce\u673a\u6570\u91cf YXL.ACU001.FJ.COUNT = 9 +#\u98ce\u673a\u7f16\u7801\u5217\u8868 +YXL.ACU001.FJ.ZC.LIST = YXL.ACU001.DFJ01;YXL.ACU001.DFJ02;YXL.ACU001.DFJ03;YXL.ACU001.SFJ01;YXL.ACU001.SFJ02;YXL.ACU001.SFJ03;YXL.ACU001.RFJ01;YXL.ACU001.RFJ02;YXL.ACU001.RFJ03 #\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJSTAT.START = 0016 +YXL.ACU001.FJSTAT.START = 16 #\u98ce\u673a\u72b6\u6001\u6240\u5360\u5b57\u6570 YXL.ACU001.FJSTAT.WORDCOUNT = 5 -#\u98ce\u673a\u72b6\u6001\u6240\u5360\u4f4d\u6570 -YXL.ACU001.FJSTAT.BITCOUNT = 72 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 -YXL.ACU001.FJRT.START = 0200 -#(230-209)*2=42 -YXL.ACU001.FJRT.OFFSET = 42 +YXL.ACU001.FJRT.START = 200 #\u98ce\u673a\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 -YXL.ACU001.FJRT.WORDCOUNT = 48 \ No newline at end of file +YXL.ACU001.FJRT.WORDCOUNT = 48 + + +#\u6c34\u6cf5\u6570\u91cf +YXL.ACU001.SB.COUNT = 19 +#\u6c34\u6cf5\u7f16\u7801\u5217\u8868 +YXL.ACU001.SB.ZC.LIST = YXL.ACU001.DSB01;YXL.ACU001.DSB02;YXL.ACU001.DSB03;YXL.ACU001.DSB04;YXL.ACU001.DSB05;YXL.ACU001.DSB06;YXL.ACU001.SSB01;YXL.ACU001.SSB02;YXL.ACU001.SSB03;YXL.ACU001.SSB04;YXL.ACU001.SSB05;YXL.ACU001.SSB06;YXL.ACU001.RSB01;YXL.ACU001.RSB02;YXL.ACU001.RSB03;YXL.ACU001.RSB04;YXL.ACU001.RSB05;YXL.ACU001.RSB06;YXL.ACU001.RSB07 +#\u98ce\u673a\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBSTAT.START = 5 +#\u6c34\u6cf5\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBSTAT.WORDCOUNT = 8 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.SBRT.START = 100 +#\u6c34\u6cf5\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.SBRT.WORDCOUNT = 88 + + +#\u7167\u660e\u6570\u91cf +YXL.ACU001.ZM.COUNT = 3 +#\u7167\u660e\u7f16\u7801\u5217\u8868 +YXL.ACU001.ZM.ZC.LIST = YXL.ACU001.RZM01;YXL.ACU001.RZM02;YXL.ACU001.RZM03 +#\u7167\u660e\u72b6\u6001\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMSTAT.START = 2 +#\u7167\u660e\u72b6\u6001\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMSTAT.WORDCOUNT = 1 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u8d77\u59cb\u5730\u5740 +YXL.ACU001.ZMRT.START = 70 +#\u7167\u660e\u8fd0\u884c\u65f6\u957f\u6240\u5360\u5b57\u6570 +YXL.ACU001.ZMRT.WORDCOUNT = 16 \ No newline at end of file diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index 12bc69c..157f261 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -6,13 +6,10 @@ import com.szpg.db.dao.impl.PgAcuDaoImpl; import com.szpg.db.data.PgAcu; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; -import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; +import com.szpg.task.ReadCH4StatusTask; import com.szpg.task.ReadCH4ValueTask; import com.szpg.task.ReadCOStatusTask; import com.szpg.task.ReadCOValueTask; @@ -23,11 +20,13 @@ import com.szpg.task.ReadHSValueTask; import com.szpg.task.ReadO2StatusTask; import com.szpg.task.ReadO2ValueTask; +import com.szpg.task.ReadSbRtTask; +import com.szpg.task.ReadSbStatTask; import com.szpg.task.ReadWSStatusTask; import com.szpg.task.ReadWSValueTask; import com.szpg.task.ReadYWStatusTask; -import com.szpg.task.ReadCH4StatusTask; -import com.szpg.util.Configure; +import com.szpg.task.ReadZmRtTask; +import com.szpg.task.ReadZmStatTask; public class DSCTest { @@ -37,9 +36,11 @@ // PLC设备地址和端口 ACUClient client = new ACUClient("192.168.0.244", 6800); - client.setNet("00"); //网络号 - client.setNode("F4"); //节点号 - client.setUnit("00"); //单元号 + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + client.setAcucode(acu.getAcu_code()); + client.setNet(acu.getAcu_net()); //网络号 + client.setNode(acu.getAcu_node()); //节点号 + client.setUnit(acu.getAcu_unit()); //单元号 // 3将ACU的信息加入到map中 ACUClientUtil.getInstance().addClient(client); @@ -47,42 +48,43 @@ // 4新建线程启动client new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); - // 测试发送查询甲烷参数命令 -// dsc.testSendCH4Command(client); -// // 测试发送查询甲烷报警状态命令 -// dsc.testSendCH4StatusCommand(client); + // 甲烷 +// dsc.testSendCH4Command(); +// dsc.testSendCH4StatusCommand(); - // 测试发送查询温湿度监测值命令 -// dsc.testSendWSCommand(client); - // 测试发送查询温湿度报警状态命令 -// dsc.testSendWSStatusCommand(client); + // 温湿度 +// dsc.testSendWSCommand(); +// dsc.testSendWSStatusCommand(); -// // 测试发送查询一氧化碳参数命令 -// dsc.testSendCOCommand(client); -// // 测试发送查询一氧化碳报警状态命令 -// dsc.testSendCOStatusCommand(client); -// - // 测试发送查询氧气参数命令 -// dsc.testSendO2Command(client); - // 测试发送查询氧气报警状态命令 -// dsc.testSendO2StatusCommand(client); -// -// // 测试发送查询硫化氢参数命令 -// dsc.testSendHSCommand(client); -// // 测试发送查询硫化氢报警状态命令 -// dsc.testSendHSStatusCommand(client); + // 一氧化碳 +// dsc.testSendCOCommand(); +// dsc.testSendCOStatusCommand(); - // 测试发送查询爆管液位报警状态命令 -// dsc.testSendYWStatusCommand(client); + // 氧气 +// dsc.testSendO2Command(); +// dsc.testSendO2StatusCommand(); - // 测试发送查询对射报警状态命令 -// dsc.testSendDSStatusCommand(client); + // 硫化氢 +// dsc.testSendHSCommand(); +// dsc.testSendHSStatusCommand(); - // 测试发送查询风机运行状态命令 - dsc.testSendFjStatCommand(client); + // 爆管液位 +// dsc.testSendYWStatusCommand(); - // 测试发送风机运行时长命令 - dsc.testSendFjRtCommand(client); + // 对射报警 +// dsc.testSendDSStatusCommand(); + + // 风机 +// dsc.testSendFjStatCommand(); +// dsc.testSendFjRtCommand(); + + // 水泵 +// dsc.testSendSbRtCommand(); +// dsc.testSendSbStatCommand(); + + // 照明 + dsc.testSendZmRtCommand(); + dsc.testSendZmStatCommand(); } /** @@ -90,56 +92,18 @@ * * @param client */ - public void testSendCH4Command(ACUClient client) { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4.setDestinationId(dest); - - ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.START")), 2)) + "00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.WORDCOUNT"))); - ch4.setCountBit(0); //读取监测值时位数量无效 - ch4.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4ValueTask(client, ch4), 10, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4ValueTask(client, ch4), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 300, TimeUnit.SECONDS); } /** * 发送查询甲烷报警状态命令 * @param client */ - public void testSendCH4StatusCommand(ACUClient client) { - ReadMemoryCommand ch4alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ch4alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ch4alm.setDestinationId(dest); - - ch4alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ch4alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.START")), 2)) + "00"); - ch4alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.WORDCOUNT"))); - ch4alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CHALM.BITCOUNT"))); - ch4alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CH.COUNT"))); - + private void testSendCH4StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCH4StatusTask(client, ch4alm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCH4StatusTask(client, ch4alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 300, TimeUnit.SECONDS); } /** @@ -147,57 +111,18 @@ * * @param client */ - public void testSendWSCommand(ACUClient client) { - ReadMemoryCommand ws = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ws.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ws.setDestinationId(dest); - - ws.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - ws.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WD.START")), 2)) + "00"); - ws.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.WORDCOUNT"))); - ws.setCountBit(0); //读取监测值时位数量无效 - ws.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - ws.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".SD.OFFSET"))); - + private void testSendWSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSValueTask(client, ws), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSValueTask(client, ws), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询温湿度报警状态命令 * @param client */ - public void testSendWSStatusCommand(ACUClient client) { - ReadMemoryCommand wsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - wsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - wsalm.setDestinationId(dest); - - wsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - wsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.START")), 2)) + "00"); - wsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.WORDCOUNT"))); - wsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WSALM.BITCOUNT"))); - wsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".WS.COUNT"))); - + private void testSendWSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadWSStatusTask(client, wsalm), 25, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadWSStatusTask(client, wsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 300, TimeUnit.SECONDS); } /** @@ -205,56 +130,18 @@ * * @param client */ - public void testSendCOCommand(ACUClient client) { - ReadMemoryCommand co = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - co.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - co.setDestinationId(dest); - - co.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - co.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.START")), 2)) + "00"); - co.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.WORDCOUNT"))); - co.setCountBit(0); //读取监测值时位数量无效 - co.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOValueTask(client, co), 30, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOValueTask(client, co), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendCOStatusCommand(ACUClient client) { - ReadMemoryCommand coalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - coalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - coalm.setDestinationId(dest); - - coalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - coalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.START")), 2)) + "00"); - coalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.WORDCOUNT"))); - coalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".COALM.BITCOUNT"))); - coalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".CO.COUNT"))); - + private void testSendCOStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadCOStatusTask(client, coalm), 35, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadCOStatusTask(client, coalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 300, TimeUnit.SECONDS); } /** @@ -262,56 +149,18 @@ * * @param client */ - public void testSendO2Command(ACUClient client) { - ReadMemoryCommand o2 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2.setDestinationId(dest); - - o2.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - o2.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.START")), 2)) + "00"); - o2.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.WORDCOUNT"))); - o2.setCountBit(0); //读取监测值时位数量无效 - o2.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2Command() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2ValueTask(client, o2), 40, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2ValueTask(client, o2), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 300, TimeUnit.SECONDS); } /** * 发送查询一氧化碳报警状态命令 * @param client */ - public void testSendO2StatusCommand(ACUClient client) { - ReadMemoryCommand o2alm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - o2alm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - o2alm.setDestinationId(dest); - - o2alm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - o2alm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.START")), 2)) + "00"); - o2alm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.WORDCOUNT"))); - o2alm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2ALM.BITCOUNT"))); - o2alm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".O2.COUNT"))); - + private void testSendO2StatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadO2StatusTask(client, o2alm), 45, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadO2StatusTask(client, o2alm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 300, TimeUnit.SECONDS); } /** @@ -319,84 +168,27 @@ * * @param client */ - public void testSendHSCommand(ACUClient client) { - ReadMemoryCommand hs = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hs.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hs.setDestinationId(dest); - - hs.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - hs.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.START")), 2)) + "00"); - hs.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.WORDCOUNT"))); - hs.setCountBit(0); //读取监测值时位数量无效 - hs.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSValueTask(client, hs), 50, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSValueTask(client, hs), 12, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 300, TimeUnit.SECONDS); } /** * 发送查询硫化氢报警状态命令 * @param client */ - public void testSendHSStatusCommand(ACUClient client) { - ReadMemoryCommand hsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - hsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - hsalm.setDestinationId(dest); - - hsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - hsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.START")), 2)) + "00"); - hsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.WORDCOUNT"))); - hsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HSALM.BITCOUNT"))); - hsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".HS.COUNT"))); - + private void testSendHSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadHSStatusTask(client, hsalm), 55, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 300, TimeUnit.SECONDS); } /** * 发送查询爆管液位报警状态命令 * @param client */ - public void testSendYWStatusCommand(ACUClient client) { - ReadMemoryCommand ywalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - ywalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - ywalm.setDestinationId(dest); - - ywalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - ywalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.START")), 2)) + "00"); - ywalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.WORDCOUNT"))); - ywalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YWALM.BITCOUNT"))); - ywalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".YW.COUNT"))); - + private void testSendYWStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadYWStatusTask(client, ywalm), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 10, 300, TimeUnit.SECONDS); } @@ -404,84 +196,62 @@ * 发送查询对射报警状态命令 * @param client */ - public void testSendDSStatusCommand(ACUClient client) { - ReadMemoryCommand dsalm = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - dsalm.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - dsalm.setDestinationId(dest); - - dsalm.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - dsalm.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.START")), 2)) + "00"); - dsalm.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.WORDCOUNT"))); - dsalm.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DSALM.BITCOUNT"))); - dsalm.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".DS.COUNT"))); - + private void testSendDSStatusCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadDSStatusTask(client, dsalm), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 20, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行状态命令 * @param client */ - public void testSendFjStatCommand(ACUClient client) { - ReadMemoryCommand fjstat = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjstat.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjstat.setDestinationId(dest); - - fjstat.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); - - fjstat.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.START")), 2)) + "00"); - fjstat.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.WORDCOUNT"))); - fjstat.setCountBit(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJSTAT.BITCOUNT"))); - fjstat.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - + private void testSendFjStatCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjStatTask(client, fjstat), 15, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjStatTask(), 15, 300, TimeUnit.SECONDS); } /** * 发送查询风机运行时长命令 * @param client */ - public void testSendFjRtCommand(ACUClient client) { - ReadMemoryCommand fjrt = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); - String sour = Configure.getProperty("sys", "LOCALHOST.NET") + - Configure.getProperty("sys", "LOCALHOST.NODE") + - Configure.getProperty("sys", "LOCALHOST.UNIT"); - fjrt.setMessageProducerId(sour); - - PgAcu acu = new PgAcuDaoImpl().findACUById(1); - String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); - fjrt.setDestinationId(dest); - - fjrt.setMemoryArea(FINSConstants.MEMORY_DM_AREA); - - fjrt.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.START")), 2)) + "00"); - fjrt.setCountWord(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.WORDCOUNT"))); - fjrt.setCountBit(0); //读取DM区时位无效 - fjrt.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJ.COUNT"))); - fjrt.setOffset(Integer.parseInt(Configure.getProperty("acubl", acu.getAcu_code() + ".FJRT.OFFSET"))); - + private void testSendFjRtCommand() { ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.scheduleWithFixedDelay(new ReadFjRtTask(client, fjrt), 20, 300, TimeUnit.SECONDS); -// sche.schedule(new ReadHSStatusTask(client, hsalm), 15, TimeUnit.SECONDS); -// sche.shutdown(); //执行完任务之后关闭线程 + sche.scheduleWithFixedDelay(new ReadFjRtTask(), 20, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行状态命令 + * @param client + */ + private void testSendSbStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbStatTask(), 25, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询水泵运行时长命令 + * @param client + */ + private void testSendSbRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadSbRtTask(), 30, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行状态命令 + * @param client + */ + private void testSendZmStatCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmStatTask(), 35, 300, TimeUnit.SECONDS); + } + + /** + * 发送查询照明运行时长命令 + * @param client + */ + private void testSendZmRtCommand() { + ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); + sche.scheduleWithFixedDelay(new ReadZmRtTask(), 40, 300, TimeUnit.SECONDS); } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index ed4eaa7..5dc85d2 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -8,4 +8,6 @@ public List findAllACU(); public PgAcu findACUById(Integer id); + + public PgAcu findACUByDest(String dest); } diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index a9d5686..42f38f6 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -9,10 +9,11 @@ public List findAll(); public PgAcuRdcmd findById(String id); - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type); public int addCmdRecord(PgAcuRdcmd cmd); - public int updateCmdRecordResponsed(String cmdId); + public int updateCmdRecordTimeout(String cmdId); public int deleteCmdRecord(String cmdId); + + public int deleteTimeoutCmd(); } diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java index a93c3bd..8eb4bd8 100644 --- a/src/com/szpg/db/dao/PgDeviceDao.java +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -5,9 +5,5 @@ public interface PgDeviceDao { public List findDeviceIdByDestAndType(String dest, String type); - - public List findCH4DeviceIdByDest(String dest); - public List findWSDeviceIdByDest(String dest); - public List findCODeviceIdByDest(String dest); - public List findO2DeviceIdByDest(String dest); + public Integer findDeviceIdByCode(String code); } diff --git a/src/com/szpg/db/dao/PgHjsbblDao.java b/src/com/szpg/db/dao/PgHjsbblDao.java new file mode 100644 index 0000000..e37f44d --- /dev/null +++ b/src/com/szpg/db/dao/PgHjsbblDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgHjsbbl; + +public interface PgHjsbblDao { + + public PgHjsbbl findBlByBh(String blbh); +} diff --git a/src/com/szpg/db/dao/PgSbDao.java b/src/com/szpg/db/dao/PgSbDao.java new file mode 100644 index 0000000..7ad78d4 --- /dev/null +++ b/src/com/szpg/db/dao/PgSbDao.java @@ -0,0 +1,34 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; + +/** + * 水泵运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgSbDao { + + /******** 水泵累计运行时长 ********/ + public PgSbRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgSbRt sbrt); + public int addRtRecord(int second1, int hour1, String tm, int deviceid); + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid); + + + /******** 水泵运行状态 ********/ + public List findAllStat(); + public PgSbStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgSbStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgSbStat sbstat); + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid); + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgZmDao.java b/src/com/szpg/db/dao/PgZmDao.java new file mode 100644 index 0000000..debc86c --- /dev/null +++ b/src/com/szpg/db/dao/PgZmDao.java @@ -0,0 +1,33 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; + +/** + * 照明运行相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgZmDao { + + /******** 照明累计运行时长 ********/ + public PgZmRt findLatestRtByDevice(Integer deviceid); + + public int addRtRecord(PgZmRt zmrt); + public int addRtRecord(int second, int hour, String tm, int deviceid); + + + /******** 照明运行状态 ********/ + public List findAllStat(); + public PgZmStat findStatById(Integer id); + + public List findStatByDevice(Integer deviceid); + public List findStatByDeviceAndTm(Integer deviceid, String start, String end); + public PgZmStat findLatestStatByDevice(Integer deviceid); + + public int addStatRecord(PgZmStat zmstat); + public int addStatRecord(boolean run, String tm, int deviceid); + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index 90956d9..751c2ce 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -81,5 +81,39 @@ return null; } + + @Override + public PgAcu findACUByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ACU_DEST = ?"; + Object[] param = new Object[1]; + param[0] = dest; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据目的地址查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } } diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index 16b2285..6317a39 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -82,45 +82,10 @@ } @Override - public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { - Connection conn = null; - - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; - Object[] params = new Object[2]; - params[0] = dest; - params[1] = count; - - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); - - if (null != list && list.isEmpty() == false) { - logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); - - return list.get(0); - } else - return null; - } catch (Exception ex) { - logger.error("根据目的地址和字数查询内存读取命令异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - - @Override public PgAcuRdcmd findLatestCmdByDestAndType(String dest, String type) { Connection conn = null; - String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; + String queryStr = "SELECT C.* FROM PG_ACU_RDCMD C, PG_ACU A WHERE TIMEOUT='0' AND A.ACU_CODE=C.DEST_ACU_CODE AND A.ACU_DEST=? AND CMD_TYPE=? ORDER BY TM DESC"; Object[] params = new Object[2]; params[0] = dest; params[1] = type; @@ -155,20 +120,13 @@ Connection conn = null; String insertStr = "INSERT INTO PG_ACU_RDCMD " + - "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, COUNT_BIT, COUNT_SENSOR, OFFSET, RESPONSED, TIMEOUT) " + - "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')"; - Object[] params = new Object[11]; + "(ID, TM, CMD_TYPE, DEST_ACU_CODE, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, '0')"; + Object[] params = new Object[4]; params[0] = cmd.getId(); params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); params[2] = cmd.getCmd_type(); - params[3] = cmd.getDest(); - params[4] = cmd.getMem_area_cd(); - params[5] = cmd.getStart_mem_word(); - params[6] = cmd.getStart_mem_bit(); - params[7] = cmd.getCount_word(); - params[8] = cmd.getCount_bit(); - params[9] = cmd.getCount_sensor(); - params[10] = null == cmd.getOffset() ? 0 : cmd.getOffset(); + params[3] = cmd.getDest_acu_code(); try { conn = ConnectionManager.getConnectionFromC3P0(); @@ -196,10 +154,10 @@ } @Override - public int updateCmdRecordResponsed(String cmdId) { + public int updateCmdRecordTimeout(String cmdId) { Connection conn = null; - String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + String updateStr = "UPDATE PG_ACU_RDCMD SET TIMEOUT = '1' WHERE ID = ?"; Object[] param = new Object[1]; param[0] = cmdId; @@ -210,14 +168,15 @@ QueryRunner runner = new QueryRunner(); int count = runner.update(conn, updateStr, param); - if (count > 0) - logger.debug("更新读取命令已响应字段成功" + cmdId); - else - logger.error("更新读取命令已响应字段失败!"); + if (count > 0) { + logger.debug("更新读取命令已超时字段成功" + cmdId); + } else { + logger.error("更新读取命令已超时字段成功" + cmdId); + } return count; } catch (Exception ex) { - logger.error("更新读取命令已响应字段异常", ex); + logger.error("更新读取命令已超时字段异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -261,4 +220,34 @@ return 0; } + @Override + public int deleteTimeoutCmd() { + Connection conn = null; + + String updateStr = "DELETE FROM PG_ACU_RDCMD WHERE TIMEOUT = '1'"; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr); + + if (count > 0) { + logger.debug("删除超时的命令成功"); + } + + return count; + } catch (Exception ex) { + logger.error("删除超时的命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java index 40e4737..b63352a 100644 --- a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -84,51 +84,14 @@ return null; } - @Override - public List findCH4DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%甲烷%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } @Override - public List findWSDeviceIdByDest(String dest) { + public Integer findDeviceIdByCode(String code) { Connection conn = null; - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%温湿度%' ORDER BY D.ID"; + String queryStr = "SELECT ID FROM PG_DEVICE WHERE ASSETCODE = ?"; Object[] param = new Object[1]; - param[0] = dest; + param[0] = code; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); @@ -136,20 +99,17 @@ QueryRunner runner = new QueryRunner(); List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询温湿度设备ID成功[" + tempList.size() + "]"); + if (null != tempList && tempList.size() == 1) { + int id = ((Number) tempList.get(0)).intValue(); - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; + logger.debug("根据代码查询设备ID成功[ID=" + id + ", CODE=" + code + "]"); + return id; } - else - return null; + else { + return -1; + } } catch (Exception ex) { - logger.error("根据ACU的目的地址查询温湿度设备ID异常", ex); + logger.error("根据代码查询设备ID异常", ex); } finally { try { DbUtils.commitAndClose(conn); @@ -157,83 +117,7 @@ e.printStackTrace(); } } - return null; - } - - @Override - public List findCODeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%一氧化碳%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询一氧化碳设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询一氧化碳设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; - } - - @Override - public List findO2DeviceIdByDest(String dest) { - Connection conn = null; - - String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? AND D.DEVCODE LIKE '%氧气%' ORDER BY D.ID"; - Object[] param = new Object[1]; - param[0] = dest; - try { - conn = ConnectionManager.getConnectionFromC3P0(); - conn.setAutoCommit(false); - - QueryRunner runner = new QueryRunner(); - List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); - - if (null != tempList && tempList.isEmpty() == false) { - logger.debug("根据ACU的目的地址查询氧气设备ID成功[" + tempList.size() + "]"); - - List list = new ArrayList(); - for (int i = 0; i < tempList.size(); i++) { - list.add(((Number) tempList.get(i)).intValue()); - } - - return list; - } - else - return null; - } catch (Exception ex) { - logger.error("根据ACU的目的地址查询氧气设备ID异常", ex); - } finally { - try { - DbUtils.commitAndClose(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - } - return null; + return -1; } } diff --git a/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java new file mode 100644 index 0000000..6ebe561 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgHjsbblDaoImpl.java @@ -0,0 +1,54 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.util.ConnectionManager; + +public class PgHjsbblDaoImpl implements PgHjsbblDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgHjsbbl findBlByBh(String blbh) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_HJSBBL WHERE BLBH = ?"; + Object[] param = new Object[1]; + param[0] = blbh; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgHjsbbl.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据编号查询变量成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据编号查询变量异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgSbDaoImpl.java b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java new file mode 100644 index 0000000..743c2ea --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgSbDaoImpl.java @@ -0,0 +1,541 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.data.PgSbRt; +import com.szpg.db.data.PgSbStat; +import com.szpg.db.util.ConnectionManager; + +public class PgSbDaoImpl implements PgSbDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgSbRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2 FROM PG_SB_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbRt rt = new PgSbRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond1(Integer.parseInt((String) item[3])); + rt.setRunsecond2(Integer.parseInt((String) item[4])); + rt.setRunhour1(Integer.parseInt((String) item[5])); + rt.setRunhour2(Integer.parseInt((String) item[6])); + + logger.debug("根据ID查询水泵最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgSbRt sbrt) { + return addRtRecord(sbrt.getRunsecond1(), sbrt.getRunsecond2(), sbrt.getRunhour1(), sbrt.getRunhour2(), sbrt.getTmStr(), sbrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second1, int hour1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNHOUR1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second1; + params[1] = hour1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second1=" + second1 + ", hour1=" + hour1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addRtRecord(int second1, int hour1, int second2, int hour2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_RT " + + "(RUNSECOND1, RUNSECOND2, RUNHOUR1, RUNHOUR2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = second1; + params[1] = second2; + params[2] = hour1; + params[3] = hour2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行时长成功[tm=" + tm + ", second=" + second1 + "/" + second2 + ", hour=" + hour1 + "/" + hour2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询水泵运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgSbStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN1, RUN2, FLT1, FLT2 FROM PG_SB_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgSbStat stat = new PgSbStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun1(Boolean.parseBoolean((String) item[3])); + stat.setRun2(Boolean.parseBoolean((String) item[4])); + stat.setFlt1(Boolean.parseBoolean((String) item[5])); + stat.setFlt2(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询水泵最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询水泵最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgSbStat sbstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = sbstat.getRun1(); + params[1] = sbstat.getRun2(); + params[2] = sbstat.getFlt1(); + params[3] = sbstat.getFlt2(); + params[4] = sbstat.getTmStr(); + params[5] = sbstat.getTmStr(); + params[6] = sbstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功" + sbstat); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean flt1, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, FLT1, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run1; + params[1] = flt1; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run1=" + run1 + ", flt1=" + flt1 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run1, boolean run2, boolean flt1, boolean flt2, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_SB_STAT " + + "(RUN1, RUN2, FLT1, FLT2, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = run1; + params[1] = run2; + params[2] = flt1; + params[3] = flt2; + params[4] = tm; + params[5] = tm; + params[6] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入水泵运行状态成功[tm=" + tm + ", run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", deviceid=" + deviceid + "]"); + else + logger.error("插入水泵运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入水泵运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgZmDaoImpl.java b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java new file mode 100644 index 0000000..aa4a560 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgZmDaoImpl.java @@ -0,0 +1,495 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.data.PgZmRt; +import com.szpg.db.data.PgZmStat; +import com.szpg.db.util.ConnectionManager; + +public class PgZmDaoImpl implements PgZmDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public PgZmRt findLatestRtByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUNSECOND, RUNHOUR FROM PG_ZM_RT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmRt rt = new PgZmRt(); + Object[] item = tempList.get(0); + + rt.setId(((Number) item[0]).intValue()); + rt.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + rt.setLogtime(cal.getTime()); + rt.setUptime(cal.getTime()); + + rt.setRunsecond(Integer.parseInt((String) item[3])); + rt.setRunhour(Integer.parseInt((String) item[4])); + + logger.debug("根据ID查询照明最新运行时长成功" + rt + "]"); + + return rt; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addRtRecord(PgZmRt zmrt) { + return addRtRecord(zmrt.getRunsecond(), zmrt.getRunhour(), zmrt.getTmStr(), zmrt.getPgdeviceid()); + } + + @Override + public int addRtRecord(int second, int hour, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_RT " + + "(RUNSECOND, RUNHOUR, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = second; + params[1] = hour; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行时长成功[tm=" + tm + ", second=" + second + ", hour=" + hour + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行时长失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行时长异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public List findAllStat() { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("查询所有照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findStatById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public List findStatByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; + Object[] params = new Object[3]; + params[0] = deviceid; + params[1] = start; + params[2] = end; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询照明运行状态成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(i); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + list.add(stat); + } + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID和时间查询照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgZmStat findLatestStatByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, LOGTIME, PGDEVICEID, RUN, FLT, EN, ROUT FROM PG_ZM_STAT WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + PgZmStat stat = new PgZmStat(); + Object[] item = tempList.get(0); + + stat.setId(((Number) item[0]).intValue()); + stat.setPgdeviceid(((Number) item[2]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[1]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + stat.setLogtime(cal.getTime()); + stat.setUptime(cal.getTime()); + + stat.setRun(Boolean.parseBoolean((String) item[3])); + stat.setFlt(Boolean.parseBoolean((String) item[4])); + stat.setEn(Boolean.parseBoolean((String) item[5])); + stat.setRout(Boolean.parseBoolean((String) item[6])); + + logger.debug("根据ID查询照明最新运行状态成功" + stat + "]"); + + return stat; + } + else + return null; + } catch (Exception ex) { + logger.error("根据设备ID查询照明最新运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addStatRecord(PgZmStat zmstat) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, EN, ROUT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[7]; + params[0] = zmstat.getRun(); + params[1] = zmstat.getFlt(); + params[2] = zmstat.getEn(); + params[3] = zmstat.getRout(); + params[4] = zmstat.getTmStr(); + params[5] = zmstat.getTmStr(); + params[6] = zmstat.getPgdeviceid(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功" + zmstat); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[4]; + params[0] = run; + params[1] = tm; + params[2] = tm; + params[3] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public int addStatRecord(boolean run, boolean flt, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ZM_STAT " + + "(RUN, FLT, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[5]; + params[0] = run; + params[1] = flt; + params[2] = tm; + params[3] = tm; + params[4] = deviceid; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入照明运行状态成功[tm=" + tm + ", run=" + run + ", flt=" + flt + ", deviceid=" + deviceid + "]"); + else + logger.error("插入照明运行状态失败!"); + + return count; + } catch (Exception ex) { + logger.error("插入照明运行状态异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + +} diff --git a/src/com/szpg/db/data/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java index 2d46bfc..65158b0 100644 --- a/src/com/szpg/db/data/PgAcuRdcmd.java +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -17,20 +17,12 @@ /** * */ - private static final long serialVersionUID = -5939933737665384417L; + private static final long serialVersionUID = -4164184831926735991L; private String id; // ID private Date tm; // 命令发送时间 private String cmd_type; // 命令类型 - private String dest; // 目标地址 - private String mem_area_cd; // 内存区域代码 - private String start_mem_word; // 起始内存字地址 - private String start_mem_bit; // 起始内存位地址 - private Integer count_word; // 读取的字数量 - private Integer count_bit; //读取的位数量 - private Integer count_sensor; //传感器数量 - private Integer offset; //变量之间的偏移量 - private boolean responsed; // 是否收到响应 + private String dest_acu_code; // 目标ACU代码 private boolean timeout; // 是否超时 public PgAcuRdcmd() { @@ -62,76 +54,12 @@ this.cmd_type = cmd_type; } - public String getDest() { - return dest; + public String getDest_acu_code() { + return dest_acu_code; } - public void setDest(String dest) { - this.dest = dest; - } - - public String getMem_area_cd() { - return mem_area_cd; - } - - public void setMem_area_cd(String mem_area_cd) { - this.mem_area_cd = mem_area_cd; - } - - public String getStart_mem_word() { - return start_mem_word; - } - - public void setStart_mem_word(String start_mem_word) { - this.start_mem_word = start_mem_word; - } - - public String getStart_mem_bit() { - return start_mem_bit; - } - - public void setStart_mem_bit(String start_mem_bit) { - this.start_mem_bit = start_mem_bit; - } - - public Integer getCount_word() { - return count_word; - } - - public void setCount_word(Integer count_word) { - this.count_word = count_word; - } - - public Integer getCount_bit() { - return count_bit; - } - - public void setCount_bit(Integer count_bit) { - this.count_bit = count_bit; - } - - public Integer getCount_sensor() { - return count_sensor; - } - - public void setCount_sensor(Integer count_sensor) { - this.count_sensor = count_sensor; - } - - public Integer getOffset() { - return offset; - } - - public void setOffset(Integer offset) { - this.offset = offset; - } - - public boolean isResponsed() { - return responsed; - } - - public void setResponsed(boolean responsed) { - this.responsed = responsed; + public void setDest_acu_code(String dest_acu_code) { + this.dest_acu_code = dest_acu_code; } public boolean isTimeout() { @@ -144,7 +72,7 @@ @Override public String toString() { - return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", acu=" + dest_acu_code + "]"; } public String getTmStr() { diff --git a/src/com/szpg/db/data/PgHjsbbl.java b/src/com/szpg/db/data/PgHjsbbl.java new file mode 100644 index 0000000..7222e0c --- /dev/null +++ b/src/com/szpg/db/data/PgHjsbbl.java @@ -0,0 +1,129 @@ +package com.szpg.db.data; + +import java.util.Date; + +public class PgHjsbbl { + + private Integer id; // 主键ID + private String blbh; // 变量编号 + private String zcbh; // 资产编号 + private String zctm; // 资产条码 + private String plcdb; // PLC对应点表 + private String blms; // 变量描述 + private String blzlx; // 变量值类型 + private Date cjsj; // 变量创建时间 + private Integer cjpl; // 变量采集频率 + private String ncqy; // 变量所在内存区域 + private Integer kszdz; // 开始字地址 + private Integer jszdz; // 结束字地址 + private Integer szw; // 所在位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBlbh() { + return blbh; + } + + public void setBlbh(String blbh) { + this.blbh = blbh; + } + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getZctm() { + return zctm; + } + + public void setZctm(String zctm) { + this.zctm = zctm; + } + + public String getPlcdb() { + return plcdb; + } + + public void setPlcdb(String plcdb) { + this.plcdb = plcdb; + } + + public String getBlms() { + return blms; + } + + public void setBlms(String blms) { + this.blms = blms; + } + + public String getBlzlx() { + return blzlx; + } + + public void setBlzlx(String blzlx) { + this.blzlx = blzlx; + } + + public Date getCjsj() { + return cjsj; + } + + public void setCjsj(Date cjsj) { + this.cjsj = cjsj; + } + + public Integer getCjpl() { + return cjpl; + } + + public void setCjpl(Integer cjpl) { + this.cjpl = cjpl; + } + + public String getNcqy() { + return ncqy; + } + + public void setNcqy(String ncqy) { + this.ncqy = ncqy; + } + + public Integer getKszdz() { + return kszdz; + } + + public void setKszdz(Integer kszdz) { + this.kszdz = kszdz; + } + + public Integer getJszdz() { + return jszdz; + } + + public void setJszdz(Integer jszdz) { + this.jszdz = jszdz; + } + + public Integer getSzw() { + return szw; + } + + public void setSzw(Integer szw) { + this.szw = szw; + } + + @Override + public String toString() { + return "PgHjsbbl [blbh=" + blbh + ", plcdb=" + plcdb + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbRt.java b/src/com/szpg/db/data/PgSbRt.java new file mode 100644 index 0000000..0b1253a --- /dev/null +++ b/src/com/szpg/db/data/PgSbRt.java @@ -0,0 +1,127 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 水泵累计运行时长数据表 + * + * @author admin + * + */ +public class PgSbRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -4326181749162467939L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond1; + private Integer runsecond2; + private Integer runhour1; + private Integer runhour2; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond1() { + return runsecond1; + } + + public void setRunsecond1(Integer runsecond1) { + this.runsecond1 = runsecond1; + } + + public Integer getRunsecond2() { + return runsecond2; + } + + public void setRunsecond2(Integer runsecond2) { + this.runsecond2 = runsecond2; + } + + public Integer getRunhour1() { + return runhour1; + } + + public void setRunhour1(Integer runhour1) { + this.runhour1 = runhour1; + } + + public Integer getRunhour2() { + return runhour2; + } + + public void setRunhour2(Integer runhour2) { + this.runhour2 = runhour2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime1() { + return NumberFormat.format(runhour1 + runsecond1 / 3600, "0.00"); + } + + public String getAccRunTime2() { + return NumberFormat.format(runhour2 + runsecond2 / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgFjRt[acc=" + getAccRunTime1() + "/" + getAccRunTime2() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgSbStat.java b/src/com/szpg/db/data/PgSbStat.java new file mode 100644 index 0000000..1986965 --- /dev/null +++ b/src/com/szpg/db/data/PgSbStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 水泵运行状态数据表 + * + * @author admin + * + */ +public class PgSbStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -7911323818400671285L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run1; //水泵1运行状态 + private Boolean run2; //水泵2运行状态 + private Boolean flt1; //水泵1故障报警 + private Boolean flt2; //水泵2故障报警 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun1() { + return run1; + } + + public void setRun1(Boolean run1) { + this.run1 = run1; + } + + public Boolean getRun2() { + return run2; + } + + public void setRun2(Boolean run2) { + this.run2 = run2; + } + + public Boolean getFlt1() { + return flt1; + } + + public void setFlt1(Boolean flt1) { + this.flt1 = flt1; + } + + public Boolean getFlt2() { + return flt2; + } + + public void setFlt2(Boolean flt2) { + this.flt2 = flt2; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgSbStat[run=" + run1 + "/" + run2 + ", flt=" + flt1 + "/" + flt2 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmRt.java b/src/com/szpg/db/data/PgZmRt.java new file mode 100644 index 0000000..bbbe6dd --- /dev/null +++ b/src/com/szpg/db/data/PgZmRt.java @@ -0,0 +1,105 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.NumberFormat; +import com.szpg.util.TimeFormat; + +/** + * 照明累计运行时长数据表 + * + * @author admin + * + */ +public class PgZmRt implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -2638260189687367747L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Integer runsecond; + private Integer runhour; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Integer getRunsecond() { + return runsecond; + } + + public void setRunsecond(Integer runsecond) { + this.runsecond = runsecond; + } + + public Integer getRunhour() { + return runhour; + } + + public void setRunhour(Integer runhour) { + this.runhour = runhour; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public String getAccRunTime() { + return NumberFormat.format(runhour + runsecond / 3600, "0.00"); + } + + @Override + public String toString() { + return "PgZmRt[acc=" + getAccRunTime() + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/data/PgZmStat.java b/src/com/szpg/db/data/PgZmStat.java new file mode 100644 index 0000000..3d64027 --- /dev/null +++ b/src/com/szpg/db/data/PgZmStat.java @@ -0,0 +1,118 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 照明运行状态数据表 + * + * @author admin + * + */ +public class PgZmStat implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 2636696758486735818L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Boolean run; //运行状态标志位 + private Boolean flt; //故障报警 + private Boolean en; //手自动使能标志位 + private Boolean rout; //启停超时标志位 + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Boolean getRun() { + return run; + } + + public void setRun(Boolean run) { + this.run = run; + } + + public Boolean getFlt() { + return flt; + } + + public void setFlt(Boolean flt) { + this.flt = flt; + } + + public Boolean getEn() { + return en; + } + + public void setEn(Boolean en) { + this.en = en; + } + + public Boolean getRout() { + return rout; + } + + public void setRout(Boolean rout) { + this.rout = rout; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + @Override + public String toString() { + return "PgZmStat[run=" + run + ", flt=" + flt + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java index a98abdb..e6ded41 100644 --- a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -9,9 +9,6 @@ import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.ReadMemoryCommand; -import com.szpg.plc.util.ByteUtil; -import com.szpg.util.Configure; public class PgAcuRdcmdDaoTest { @@ -24,28 +21,17 @@ // @Test public void testAdd() { - ReadMemoryCommand ch4 = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x31); - ch4.setStartAddress("001A00"); - ch4.setCountWord(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.WORDCOUNT"))); - ch4.setCountBit(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.CHALM.BITCOUNT"))); - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(ch4.getTime().getTime()); - cmd.setCmd_type(ch4.getCommandType()); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCountWord()); - cmd.setCount_bit(ch4.getCountBit()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4VALUE); + cmd.setDest_acu_code("YXL.ACU001"); assertEquals(1, dao.addCmdRecord(cmd)); } + + @Test + public void testFindLatestCmdByDestAndType() { + assertEquals("b6da51ca612b408daf78c06c026279ed", dao.findLatestCmdByDestAndType("006B00", "10").getId()); + } // @Test public void testFindAll() { @@ -53,17 +39,12 @@ } // @Test - public void testFindByDestAndCount() { - assertEquals("12", dao.findLatestCmdByDestAndCount("006B00", 1).getCmd_type()); + public void testUpdateTimeout() { + assertEquals(1, dao.updateCmdRecordTimeout("1e37d707d1554a4ea2c9d8dc273b99d5")); } // @Test - public void testUpdateResponsed() { - assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); - } - - @Test public void testDelete() { - assertEquals(1, dao.deleteCmdRecord("2bf5c26175814b17bb043b1f86515892")); + assertEquals(1, dao.deleteCmdRecord("1e37d707d1554a4ea2c9d8dc273b99d5")); } } diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java index 1276bcc..5f18ce9 100644 --- a/src/com/szpg/db/test/PgDeviceTest.java +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -17,8 +17,8 @@ } @Test - public void testFindCH4DeviceIdByDest() { - Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + public void testFindDeviceIdByCode() { + Assert.assertEquals(1, dao.findDeviceIdByCode("YXL.ACU001.DCH01").intValue()); } } diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index bedec39..171b537 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -18,4 +18,8 @@ public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 public final static String CMD_TYPE_READFJRUNTIME = "24"; //读取风机运行时长命令 + public final static String CMD_TYPE_READSBSTAT = "25"; //读取水泵运行状态命令 + public final static String CMD_TYPE_READSBRUNTIME = "26"; //读取水泵运行时长命令 + public final static String CMD_TYPE_READZMSTAT = "27"; //读取照明运行状态命令 + public final static String CMD_TYPE_READZMRUNTIME = "28"; //读取照明运行时长命令 } diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 250ac62..11314fb 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -7,12 +7,15 @@ /** * */ - private static final long serialVersionUID = -2212489043603122735L; - + private static final long serialVersionUID = 9071962711934239961L; + private AppCommand command = null; private String destinationId; + private String acucode; + private String cmdId; + public CommandResponse() { this.setTime(Calendar.getInstance()); } @@ -42,5 +45,23 @@ this.destinationId = destinationId; } + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + public abstract void afterAction(); + + public abstract void parseData(byte[] messageData); } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 67c1a63..4608bdd 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -12,9 +12,13 @@ import com.szpg.plc.message.command.read.ReadHSValueCommand; import com.szpg.plc.message.command.read.ReadO2StatusCommand; import com.szpg.plc.message.command.read.ReadO2ValueCommand; +import com.szpg.plc.message.command.read.ReadSbRtCommand; +import com.szpg.plc.message.command.read.ReadSbStatCommand; import com.szpg.plc.message.command.read.ReadWSStatusCommand; import com.szpg.plc.message.command.read.ReadWSValueCommand; import com.szpg.plc.message.command.read.ReadYWStatusCommand; +import com.szpg.plc.message.command.read.ReadZmRtCommand; +import com.szpg.plc.message.command.read.ReadZmStatCommand; import com.szpg.plc.message.command.read.ReadCH4StatusCommand; public abstract class ReadMemoryCommand extends AppCommand { @@ -27,9 +31,7 @@ private byte memoryArea; //读取的内存区域代码 private String startAddress; //起始地址 private int countWord; //读取的字数量/1WORD=2BYTE - private int countBit; //读取的位数量 private int countSensor; //传感器数量 - private int offset; //变量内存地址之间的偏移量 public byte getMemoryArea() { return memoryArea; @@ -55,14 +57,6 @@ this.countWord = countWord; } - public int getCountBit() { - return countBit; - } - - public void setCountBit(int countBit) { - this.countBit = countBit; - } - public int getCountSensor() { return countSensor; } @@ -71,14 +65,6 @@ this.countSensor = countSensor; } - public int getOffset() { - return offset; - } - - public void setOffset(int offset) { - this.offset = offset; - } - public static ReadMemoryCommand getInstance(String type) { switch (type) { case AppMessageConstants.CMD_TYPE_READCH4VALUE: @@ -116,6 +102,16 @@ return new ReadFjStatCommand(); case AppMessageConstants.CMD_TYPE_READFJRUNTIME: return new ReadFjRtCommand(); + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + return new ReadSbStatCommand(); + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + return new ReadSbRtCommand(); + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + return new ReadZmStatCommand(); + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + return new ReadZmRtCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java new file mode 100644 index 0000000..3f6fc81 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; + +public class ReadSbRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -6264729752332327429L; + + @Override + public Class getResponseClass() { + return ReadSbRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java new file mode 100644 index 0000000..b9f2b55 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadSbStatCommand.java @@ -0,0 +1,30 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; + +public class ReadSbStatCommand extends ReadMemoryCommand { + + + /** + * + */ + private static final long serialVersionUID = 2012765001513008977L; + + @Override + public Class getResponseClass() { + return ReadSbStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询水泵运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READSBSTAT; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java new file mode 100644 index 0000000..3f2dd3d --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmRtCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; + +public class ReadZmRtCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = -4085626108733700995L; + + @Override + public Class getResponseClass() { + return ReadZmRtCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明累计运行时长命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMRUNTIME; + } + +} diff --git a/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java new file mode 100644 index 0000000..d585083 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadZmStatCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; + +public class ReadZmStatCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 366516667014576198L; + + @Override + public Class getResponseClass() { + return ReadZmStatCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询照明运行状态命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READZMSTAT; + } + +} diff --git a/src/com/szpg/plc/message/response/LinkCommandResponse.java b/src/com/szpg/plc/message/response/LinkCommandResponse.java index 2470f91..10d58d9 100644 --- a/src/com/szpg/plc/message/response/LinkCommandResponse.java +++ b/src/com/szpg/plc/message/response/LinkCommandResponse.java @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.util.ByteUtil; public class LinkCommandResponse extends CommandResponse { @@ -38,6 +39,22 @@ } @Override + public void parseData(byte[] messageData) { + if (messageData.length == 8) { + String sour = ByteUtil.binToHexString(messageData, 8, 16); //握手响应消息的源地址,实际上是PLC地址 + String dest = ByteUtil.binToHexString(messageData, 0, 8); //握手响应消息的目标地址,实际上是本机地址 + + setMessageProducerId(sour); + setDestinationId(dest); + setTime(Calendar.getInstance()); + setValid(true); + } else { + setValid(false); + logger.debug("握手命令响应消息数据域长度不符"); + } + } + + @Override public String toString() { return "终端[" + getMessageProducerId() + "]握手命令响应"; } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java index 282e4b5..e08c5fc 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -4647640298404084468L; + private static final long serialVersionUID = -6940879434912360622L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwbj; // 甲烷浓度报警状态 private List jwldbj; // 甲烷是否联动报警 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4StatusCommandResponse() { jwbj = new ArrayList(); @@ -40,30 +51,95 @@ public void setJwldbj(List jwldbj) { this.jwldbj = jwldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwbj.size(); i++) { - if (i < ids.size()) { - ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (jwbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - // 2发送查询报警值的命令 - - } + + // 遍历甲烷设备列表,将甲烷报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addSbjzRecord(jwbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CHALM.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 甲烷浓度报警状态标志位 + + // 解析甲烷浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 甲烷浓度联动报警使能标志位 + + getJwbj().add(bjBt == '1' ? true : false); + getJwldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java index 4c4cd83..5814e01 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCh4Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCh4DaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCH4ValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 6615138314462518854L; + private static final long serialVersionUID = 8081222348890587881L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 + private String[] zcList; //甲烷监测的资产列表,从配置文件中获取 public ReadCH4ValueCommandResponse() { jwnd = new ArrayList(); @@ -41,19 +53,101 @@ this.jwldbjz = jwldbjz; } + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + @Override public void afterAction() { // 1将甲烷浓度数据存入数据库 PgCh4Dao ch4Dao = new PgCh4DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CH"); - - for (int i = 0; i < jwnd.size(); i++) { - if (i < ids.size()) { - ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历甲烷设备列表,将甲烷浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU甲烷监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CH.START")); + + // 获取目标ACU甲烷相关的资产列表,即甲烷设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CH.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析甲烷浓度监测值以及甲烷浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析甲烷浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //甲烷浓度值 + + // 解析甲烷浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //甲烷报警阈值 + + getJwnd().add(value); + getJwldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java index e51fd6e..5c371c1 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = -6730342916591454611L; + private static final long serialVersionUID = 1978575736131174986L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cobj; // 一氧化碳浓度报警状态 private List coldbj; // 一氧化碳是否联动报警 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOStatusCommandResponse() { cobj = new ArrayList(); @@ -40,29 +51,95 @@ public void setColdbj(List coldbj) { this.coldbj = coldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将一氧化碳报警状态数据存入数据库 - PgCODao coalm = new PgCODaoImpl(); + PgCODao coalmDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cobj.size(); i++) { - if (i < ids.size()) { - coalm.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (cobj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历一氧化碳设备列表,将一氧化碳报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coalmDao.addSbjzRecord(cobj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".COALM.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 一氧化碳浓度报警状态标志位 + + // 解析一氧化碳浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 一氧化碳浓度联动报警使能标志位 + + getCobj().add(bjBt == '1' ? true : false); + getColdbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java index 96b9e7d..5f5335f 100644 --- a/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCOValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgCODao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgCODaoImpl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadCOValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 1701662136000200479L; + private static final long serialVersionUID = -6176747812714170040L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List cond; //一氧化碳浓度值 private List coldbjz; //一氧化碳联动报警值 + private String[] zcList; //一氧化碳监测的资产列表,从配置文件中获取 public ReadCOValueCommandResponse() { cond = new ArrayList(); @@ -40,6 +52,14 @@ public void setColdbjz(List coldbjz) { this.coldbjz = coldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgCODao coDao = new PgCODaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "CO"); - - for (int i = 0; i < cond.size(); i++) { - if (i < ids.size()) { - coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历一氧化碳设备列表,将一氧化碳浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + coDao.addPblzRecord(cond.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU一氧化碳监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".CO.START")); + + // 获取目标ACU一氧化碳相关的资产列表,即一氧化碳设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".CO.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析一氧化碳浓度监测值以及一氧化碳浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析一氧化碳浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //一氧化碳浓度值 + + // 解析一氧化碳浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //一氧化碳报警阈值 + + getCond().add(value); + getColdbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java index df088df..2b19500 100644 --- a/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadDSStatusCommandResponse.java @@ -3,21 +3,32 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDsDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgDsDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadDSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 4047613496835657828L; + private static final long serialVersionUID = -2692039091478584257L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List dsbj; // 对射报警状态 + private String[] zcList; //红外对射监测的资产列表,从配置文件中获取 public ReadDSStatusCommandResponse() { dsbj = new ArrayList(); @@ -30,28 +41,82 @@ public void setDsbj(List dsbj) { this.dsbj = dsbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将对射报警数据存入数据库 PgDsDao dsDao = new PgDsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "DS"); - - for (int i = 0; i < dsbj.size(); i++) { - if (i < ids.size()) { - dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (dsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将红外对射报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + dsDao.addSbjzRecord(dsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU红外对射报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DSALM.START")); + + // 获取目标ACU红外对射相关的资产列表,即红外对射设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析红外对射报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析红外对射报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".Alm"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 红外对射报警状态标志位 + + getDsbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java index e1565f2..e3391ab 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjRtCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8310205838594006103L; - + private static final long serialVersionUID = -3733073050500592967L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List fjscs; // 风机运行时长——秒数 private List fjsch; // 风机运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList(); @@ -40,20 +52,102 @@ public void setFjsch(List fjsch) { this.fjsch = fjsch; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjscs.size(); i++) { - if (i < ids.size()) { - fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); + + // 获取目标ACU风机相关的资产列表,即风机设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析风机运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getFjsch().add(hour); + getFjscs().add(second); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java index 15bccaa..4f2abfb 100644 --- a/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadFjStatCommandResponse.java @@ -3,32 +3,61 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgFjDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgFjDaoImpl; -import com.szpg.db.data.PgFjStat; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; public class ReadFjStatCommandResponse extends ReadMemoryCommandResponse { /** * */ - private static final long serialVersionUID = -6983756717484259517L; + private static final long serialVersionUID = -5849842153973146848L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); - private List fjzt; + private List fjFlt; + private List fjRun; + private String[] zcList; //资产列表,从配置文件中获取 public ReadFjStatCommandResponse() { - fjzt = new ArrayList(); + fjFlt = new ArrayList(); + fjRun = new ArrayList(); + } + + public List getFjFlt() { + return fjFlt; } - public List getFjzt() { - return fjzt; + public void setFjFlt(List fjFlt) { + this.fjFlt = fjFlt; } - public void setFjzt(List fjzt) { - this.fjzt = fjzt; + public List getFjRun() { + return fjRun; + } + + public void setFjRun(List fjRun) { + this.fjRun = fjRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; } @Override @@ -36,24 +65,83 @@ // 1将风机运行状态数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "FJ"); - - for (int i = 0; i < fjzt.size(); i++) { - if (i < ids.size()) { - fjzt.get(i).setPgdeviceid(ids.get(i)); - fjzt.get(i).setTm(this.getTime().getTime()); - fjDao.addStatRecord(fjzt.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将风机运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; - // 有报警状态 - if (fjzt.get(i).getFlt() == true) { - // TODO - // 1存入报警管理表 - - + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + fjDao.addStatRecord(fjRun.get(i), fjFlt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU风机运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJSTAT.START")); + + // 获取目标ACU风机相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析风机运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析风机运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + // 解析风机故障报警状态 + PgHjsbbl fltBlObj = blDao.findBlByBh(zcbh + ".Flt"); + if (null == fltBlObj) { + continue; + } + + int fkszdz = fltBlObj.getKszdz(); //开始字地址 + int foffset = fkszdz - start; //与开始字的偏移量 + int fbit = fltBlObj.getSzw(); //所在位 + + char fltBt = dataStr.charAt(dataStr.length() - 1 - foffset * 16 - fbit); // 风机故障报警标志位 + + getFjFlt().add(fltBt == '1' ? true : false); + getFjRun().add(runBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java index be44083..52132c8 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSStatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSStatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = 6630884988346141548L; + private static final long serialVersionUID = -6523885113265769167L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsbj; // 硫化氢浓度报警状态 private List hsldbj; // 硫化氢是否联动报警 + private String[] zcList; //硫化氢监测的资产列表,从配置文件中获取 public ReadHSStatusCommandResponse() { hsbj = new ArrayList(); @@ -40,29 +51,95 @@ public void setHsldbj(List hsldbj) { this.hsldbj = hsldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将硫化氢报警状态数据存入数据库 PgHSDao hsalmDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsbj.size(); i++) { - if (i < ids.size()) { - hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (hsbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将硫化氢报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsalmDao.addSbjzRecord(hsbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HSALM.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 硫化氢浓度报警状态标志位 + + // 解析硫化氢浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 硫化氢浓度联动报警使能标志位 + + getHsbj().add(bjBt == '1' ? true : false); + getHsldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java index 838d4ac..16a4b03 100644 --- a/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadHSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.PgHSDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.db.dao.impl.PgHSDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadHSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +24,13 @@ /** * */ - private static final long serialVersionUID = 3546717876436310153L; + private static final long serialVersionUID = -3864512113984510244L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List hsnd; //硫化氢浓度值 private List hsldbjz; //硫化氢联动报警值 + private String[] zcList; // 监测设备资产列表,从配置文件中获取 public ReadHSValueCommandResponse() { hsnd = new ArrayList(); @@ -40,6 +52,14 @@ public void setHsldbjz(List hsldbjz) { this.hsldbjz = hsldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -47,13 +67,87 @@ PgHSDao hsDao = new PgHSDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "HS"); - - for (int i = 0; i < hsnd.size(); i++) { - if (i < ids.size()) { - hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + hsDao.addPblzRecord(hsnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU硫化氢监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".HS.START")); + + // 获取目标ACU硫化氢相关的资产列表,即硫化氢设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".HS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析硫化氢浓度监测值以及硫化氢浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析硫化氢浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //硫化氢浓度值 + + // 解析硫化氢浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //硫化氢报警阈值 + + getHsnd().add(value); + getHsldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java index fa8e36c..1839ba9 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2StatusCommandResponse.java @@ -3,11 +3,19 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2StatusCommandResponse extends ReadMemoryCommandResponse { @@ -15,10 +23,13 @@ /** * */ - private static final long serialVersionUID = -7689160555457222001L; + private static final long serialVersionUID = 2070206047602742122L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2bj; // 氧气浓度报警状态 private List o2ldbj; // 氧气是否联动报警 + private String[] zcList; //氧气监测的资产列表,从配置文件中获取 public ReadO2StatusCommandResponse() { o2bj = new ArrayList(); @@ -40,29 +51,95 @@ public void setO2ldbj(List o2ldbj) { this.o2ldbj = o2ldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气报警状态数据存入数据库 - PgO2Dao o2alm = new PgO2DaoImpl(); + PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2bj.size(); i++) { - if (i < ids.size()) { - o2alm.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (o2bj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将氧气报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addSbjzRecord(o2bj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQALM.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度报警值 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 氧气浓度报警状态标志位 + + // 解析氧气浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".EN"); + if (null == enBlObj) { + continue; + } + + int ekszdz = enBlObj.getKszdz(); //开始字地址 + int eoffset = ekszdz - start; //与开始字的偏移量 + int ebit = enBlObj.getSzw(); //所在位 + + char enBt = dataStr.charAt(dataStr.length() - 1 - eoffset * 16 - ebit); // 氧气浓度联动报警使能标志位 + + getO2bj().add(bjBt == '1' ? true : false); + getO2ldbj().add(enBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java index 4c52856..bf1e475 100644 --- a/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadO2ValueCommandResponse.java @@ -3,22 +3,34 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgO2Dao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgO2DaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadO2ValueCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 3740028978076262508L; + private static final long serialVersionUID = -2816512676498637196L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List o2nd; // 氧气浓度值 private List o2ldbjz; // 氧气联动报警值 + private String[] zcList; // 氧气监测设备资产列表,从配置文件中获取 public ReadO2ValueCommandResponse() { o2nd = new ArrayList(); @@ -40,20 +52,102 @@ public void setO2ldbjz(List o2ldbjz) { this.o2ldbjz = o2ldbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将氧气浓度数据存入数据库 PgO2Dao o2Dao = new PgO2DaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "O2"); - - for (int i = 0; i < o2nd.size(); i++) { - if (i < ids.size()) { - o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + + if (null != zcList && zcList.length > 0) { + // 遍历氧气设备列表,将氧气浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + o2Dao.addPblzRecord(o2nd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU氧气监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YQ.START")); + + // 获取目标ACU氧气相关的资产列表,即氧气设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YQ.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析氧气浓度监测值以及氧气浓度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析氧气浓度监测值 + PgHjsbbl valueBlObj = blDao.findBlByBh(zcbh + ".Value"); + if (null == valueBlObj) { + continue; + } + + int vkszdz = valueBlObj.getKszdz(); //开始字地址 + int vjszdz = valueBlObj.getJszdz(); //结束字地址 + int vn = vjszdz - (vkszdz - 1); //字数 + int voffset = vkszdz - start; //与开始字的偏移量 + + Bytes valueBytes = new Bytes(); + for (int j = vn; j > 0; j--) { + valueBytes.append(new byte[] {messageData[(voffset + j - 1) * 2], messageData[(voffset + j - 1) * 2 + 1]}); + } + + float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueBytes.toBytes()), 16)); //氧气浓度值 + + // 解析氧气浓度报警阈值 + PgHjsbbl thresholdBlObj = blDao.findBlByBh(zcbh + ".Set"); + if (null == thresholdBlObj) { + continue; + } + + int tkszdz = thresholdBlObj.getKszdz(); //开始字地址 + int tjszdz= thresholdBlObj.getJszdz(); //结束字地址 + int tn = tjszdz - (tkszdz - 1); //字数 + int toffset = tkszdz - start; //与开始字的偏移量 + + Bytes thresholdBytes = new Bytes(); + for (int k = tn; k > 0; k--) { + thresholdBytes.append(new byte[] {messageData[(toffset + k - 1) * 2], messageData[(toffset + k - 1) * 2 + 1]}); + } + + float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdBytes.toBytes()), 16)); //氧气报警阈值 + + getO2nd().add(value); + getO2ldbjz().add(threshold); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java new file mode 100644 index 0000000..8bf0494 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbRtCommandResponse.java @@ -0,0 +1,216 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 8066103988242013978L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1scs; // 水泵1运行时长——秒数 + private List sb2scs; // 水泵2运行时长——秒数 + private List sb1sch; // 水泵1运行时长——小时数 + private List sb2sch; // 水泵2运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadSbRtCommandResponse() { + sb1scs = new ArrayList(); + sb2scs = new ArrayList(); + sb1sch = new ArrayList(); + sb2sch = new ArrayList(); + } + + public List getSb1scs() { + return sb1scs; + } + + public void setSb1scs(List sb1scs) { + this.sb1scs = sb1scs; + } + + public List getSb2scs() { + return sb2scs; + } + + public void setSb2scs(List sb2scs) { + this.sb2scs = sb2scs; + } + + public List getSb1sch() { + return sb1sch; + } + + public void setSb1sch(List sb1sch) { + this.sb1sch = sb1sch; + } + + public List getSb2sch() { + return sb2sch; + } + + public void setSb2sch(List sb2sch) { + this.sb2sch = sb2sch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵累计运行时长数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2sch.get(i)) { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addRtRecord(sb1scs.get(i), sb1sch.get(i), sb2scs.get(i), sb2sch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBRT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行时长的小时数 + PgHjsbbl hour1BlObj = blDao.findBlByBh(zcbh + ".RunH1"); + if (null == hour1BlObj) { + continue; + } + + int h1kszdz = hour1BlObj.getKszdz(); //开始字地址 + int h1jszdz = hour1BlObj.getJszdz(); //结束字地址 + int h1n = h1jszdz - (h1kszdz - 1); //字数 + int h1offset = h1kszdz - start; //与开始字的偏移量 + + Bytes hour1Bytes = new Bytes(); + for (int j = h1n; j > 0; j--) { + hour1Bytes.append(new byte[] {messageData[(h1offset + j - 1) * 2], messageData[(h1offset + j - 1) * 2 + 1]}); + } + + int hour1 = ByteUtil.binToInt(hour1Bytes.toBytes()); //运行时长的小时数 + + // 解析水泵2运行时长的小时数 + PgHjsbbl hour2BlObj = blDao.findBlByBh(zcbh + ".RunH2"); + if (null == hour2BlObj) { + sb2sch.add(null); + } else { + int h2kszdz = hour2BlObj.getKszdz(); //开始字地址 + int h2jszdz = hour2BlObj.getJszdz(); //结束字地址 + int h2n = h2jszdz - (h2kszdz - 1); //字数 + int h2offset = h2kszdz - start; //与开始字的偏移量 + + Bytes hour2Bytes = new Bytes(); + for (int j = h2n; j > 0; j--) { + hour2Bytes.append(new byte[] {messageData[(h2offset + j - 1) * 2], messageData[(h2offset + j - 1) * 2 + 1]}); + } + + int hour2 = ByteUtil.binToInt(hour2Bytes.toBytes()); //运行时长的小时数 + sb2sch.add(hour2); + } + + // 解析水泵1运行时长的秒数 + PgHjsbbl second1BlObj = blDao.findBlByBh(zcbh + ".RunS1"); + if (null == second1BlObj) { + continue; + } + + int s1kszdz = second1BlObj.getKszdz(); //开始字地址 + int s1jszdz= second1BlObj.getJszdz(); //结束字地址 + int s1n = s1jszdz - (s1kszdz - 1); //字数 + int s1offset = s1kszdz - start; //与开始字的偏移量 + + Bytes second1Bytes = new Bytes(); + for (int k = s1n; k > 0; k--) { + second1Bytes.append(new byte[] {messageData[(s1offset + k - 1) * 2], messageData[(s1offset + k - 1) * 2 + 1]}); + } + + int second1 = ByteUtil.binToInt(second1Bytes.toBytes()); //运行时长的秒数 + + // 解析水泵2运行时长的秒数 + PgHjsbbl second2BlObj = blDao.findBlByBh(zcbh + ".RunS2"); + if (null == second2BlObj) { + sb2scs.add(null); + } else { + int s2kszdz = second2BlObj.getKszdz(); //开始字地址 + int s2jszdz= second2BlObj.getJszdz(); //结束字地址 + int s2n = s2jszdz - (s2kszdz - 1); //字数 + int s2offset = s2kszdz - start; //与开始字的偏移量 + + Bytes second2Bytes = new Bytes(); + for (int k = s2n; k > 0; k--) { + second2Bytes.append(new byte[] {messageData[(s2offset + k - 1) * 2], messageData[(s2offset + k - 1) * 2 + 1]}); + } + + int second2 = ByteUtil.binToInt(second2Bytes.toBytes()); //运行时长的秒数 + sb2scs.add(second2); + } + + getSb1sch().add(hour1); + getSb1scs().add(second1); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java new file mode 100644 index 0000000..19f8b27 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadSbStatCommandResponse.java @@ -0,0 +1,199 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgSbDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.dao.impl.PgSbDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadSbStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -860746446736533413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List sb1Flt; + private List sb2Flt; + private List sb1Run; + private List sb2Run; + private String[] zcList; // 资产列表,从配置文件中获取 + + public ReadSbStatCommandResponse() { + sb1Flt = new ArrayList(); + sb2Flt = new ArrayList(); + sb1Run = new ArrayList(); + sb2Run = new ArrayList(); + } + + public List getSb1Flt() { + return sb1Flt; + } + + public void setSb1Flt(List sb1Flt) { + this.sb1Flt = sb1Flt; + } + + public List getSb2Flt() { + return sb2Flt; + } + + public void setSb2Flt(List sb2Flt) { + this.sb2Flt = sb2Flt; + } + + public List getSb1Run() { + return sb1Run; + } + + public void setSb1Run(List sb1Run) { + this.sb1Run = sb1Run; + } + + public List getSb2Run() { + return sb2Run; + } + + public void setSb2Run(List sb2Run) { + this.sb2Run = sb2Run; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将水泵运行状态数据存入数据库 + PgSbDao sbDao = new PgSbDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将水泵运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + // 根据是否有数据来判断单泵还是双泵 + if (null == sb2Run.get(i)) { + sbDao.addStatRecord(sb1Run.get(i), sb1Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } else { + sbDao.addStatRecord(sb1Run.get(i), sb2Run.get(i), sb1Flt.get(i), sb2Flt.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] { messageData[c], messageData[c + 1] }) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU水泵运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".SBSTAT.START")); + + // 获取目标ACU水泵相关的资产列表,即水泵列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".SB.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析水泵运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析水泵1运行状态 + PgHjsbbl run1BlObj = blDao.findBlByBh(zcbh + ".Run1"); + if (null == run1BlObj) { + continue; + } + + int r1kszdz = run1BlObj.getKszdz(); // 开始字地址 + int r1offset = r1kszdz - start; // 与开始字的偏移量 + int r1bit = run1BlObj.getSzw(); // 所在位 + + char run1Bt = dataStr.charAt(dataStr.length() - 1 - r1offset * 16 - r1bit); // 水泵1运行状态标志位 + + // 解析水泵2运行状态 + PgHjsbbl run2BlObj = blDao.findBlByBh(zcbh + ".Run2"); + if (null == run2BlObj) { + getSb2Run().add(null); + } else { + int r2kszdz = run2BlObj.getKszdz(); // 开始字地址 + int r2offset = r2kszdz - start; // 与开始字的偏移量 + int r2bit = run2BlObj.getSzw(); // 所在位 + + char run2Bt = dataStr.charAt(dataStr.length() - 1 - r2offset * 16 - r2bit); // 水泵2运行状态标志位 + getSb2Run().add(run2Bt == '1' ? true : false); + } + + // 解析水泵1故障报警状态 + PgHjsbbl flt1BlObj = blDao.findBlByBh(zcbh + ".Flt1"); + if (null == flt1BlObj) { + continue; + } + + int f1kszdz = flt1BlObj.getKszdz(); // 开始字地址 + int f1offset = f1kszdz - start; // 与开始字的偏移量 + int f1bit = flt1BlObj.getSzw(); // 所在位 + + char flt1Bt = dataStr.charAt(dataStr.length() - 1 - f1offset * 16 - f1bit); // 水泵1故障报警标志位 + + // 解析水泵2故障报警状态 + PgHjsbbl flt2BlObj = blDao.findBlByBh(zcbh + ".Flt2"); + if (null == flt2BlObj) { + getSb2Flt().add(null); + } else { + + int f2kszdz = flt2BlObj.getKszdz(); // 开始字地址 + int f2offset = f2kszdz - start; // 与开始字的偏移量 + int f2bit = flt2BlObj.getSzw(); // 所在位 + + char flt2Bt = dataStr.charAt(dataStr.length() - 1 - f2offset * 16 - f2bit); // 水泵1故障报警标志位 + getSb2Flt().add(flt2Bt == '1' ? true : false); + } + + getSb1Flt().add(flt1Bt == '1' ? true : false); + getSb1Run().add(run1Bt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java index 41a3719..fc57b36 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSStatusCommandResponse.java @@ -3,24 +3,35 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 2256619329720969351L; - + private static final long serialVersionUID = -3778608871616106346L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + private List wdbj; // 温度报警状态 private List sdbj; // 湿度报警状态 private List wdldbj; // 温度是否联动报警 private List sdldbj; // 湿度是否联动报警 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSStatusCommandResponse() { wdbj = new ArrayList(); @@ -60,37 +71,121 @@ public void setSdldbj(List sdldbj) { this.sdldbj = sdldbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将温湿度报警状态存入数据库 PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wdbj.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (wdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } - - if (sdbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - // 2发送查询报警值的命令 - - } + + // 遍历资产列表,将温湿度报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdbjRecord(wdbj.get(i), sdbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WSALM.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度报警值 + PgHjsbbl almBlTemObj = blDao.findBlByBh(zcbh + ".TemAH"); + if (null == almBlTemObj) { + continue; + } + + int awkszdz = almBlTemObj.getKszdz(); //开始字地址 + int awoffset = awkszdz - start; //与开始字的偏移量 + int awbit = almBlTemObj.getSzw(); //所在位 + + char bjTemBt = dataStr.charAt(dataStr.length() - 1 - awoffset * 16 - awbit); // 温度报警状态标志位 + + // 2解析温度浓度报警联动标志位 + PgHjsbbl enBlObj = blDao.findBlByBh(zcbh + ".TemEN"); + if (null == enBlObj) { + continue; + } + + int ewkszdz = enBlObj.getKszdz(); //开始字地址 + int ewoffset = ewkszdz - start; //与开始字的偏移量 + int ewbit = enBlObj.getSzw(); //所在位 + + char enTemBt = dataStr.charAt(dataStr.length() - 1 - ewoffset * 16 - ewbit); // 温度联动报警使能标志位 + + // 3解析湿度报警值 + PgHjsbbl almBlWetObj = blDao.findBlByBh(zcbh + ".WetAH"); + if (null == almBlWetObj) { + continue; + } + + int askszdz = almBlWetObj.getKszdz(); //开始字地址 + int asoffset = askszdz - start; //与开始字的偏移量 + int asbit = almBlWetObj.getSzw(); //所在位 + + char bjWetBt = dataStr.charAt(dataStr.length() - 1 - asoffset * 16 - asbit); // 湿度报警状态标志位 + + // 4解析湿度报警联动标志位 + PgHjsbbl enBlWetObj = blDao.findBlByBh(zcbh + ".WetEN"); + if (null == enBlWetObj) { + continue; + } + + int eskszdz = enBlWetObj.getKszdz(); //开始字地址 + int esoffset = eskszdz - start; //与开始字的偏移量 + int esbit = enBlWetObj.getSzw(); //所在位 + + char enWetBt = dataStr.charAt(dataStr.length() - 1 - esoffset * 16 - esbit); // 温湿度浓度联动报警使能标志位 + + getWdbj().add(bjTemBt == '1' ? true : false); + getSdbj().add(bjWetBt == '1' ? true : false); + getWdldbj().add(enTemBt == '1' ? true : false); + getSdldbj().add(enWetBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java index ca9f027..fa63f77 100644 --- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java @@ -3,11 +3,20 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgWsDao; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.dao.impl.PgWsDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadWSValueCommandResponse extends ReadMemoryCommandResponse { @@ -15,12 +24,15 @@ /** * */ - private static final long serialVersionUID = 1427194192669696325L; + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List wd; //温度监测值 private List sd; //湿度监测值 private List wdbjz; //温度报警阈值 private List sdbjz; //湿度报警阈值 + private String[] zcList; //温湿度监测的资产列表,从配置文件中获取 public ReadWSValueCommandResponse() { wd = new ArrayList(); @@ -60,6 +72,14 @@ public void setSdbjz(List sdbjz) { this.sdbjz = sdbjz; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { @@ -67,13 +87,127 @@ PgWsDao wsDao = new PgWsDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "WS"); - - for (int i = 0; i < wd.size(); i++) { - if (i < ids.size()) { - wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + if (null != zcList && zcList.length > 0) { + // 遍历温湿度设备列表,将温湿度浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + wsDao.addWsdzRecord(wd.get(i), sd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU温湿度监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".WS.START")); + + // 获取目标ACU温湿度相关的资产列表,即温湿度设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".WS.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析温湿度监测值以及温湿度报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析温度监测值 + PgHjsbbl valueTemBlObj = blDao.findBlByBh(zcbh + ".TemValue"); + if (null == valueTemBlObj) { + continue; + } + + int vwkszdz = valueTemBlObj.getKszdz(); //开始字地址 + int vwjszdz = valueTemBlObj.getJszdz(); //结束字地址 + int vwn = vwjszdz - (vwkszdz - 1); //字数 + int vwoffset = vwkszdz - start; //与开始字的偏移量 + + Bytes valueTemBytes = new Bytes(); + for (int j = vwn; j > 0; j--) { + valueTemBytes.append(new byte[] {messageData[(vwoffset + j - 1) * 2], messageData[(vwoffset + j - 1) * 2 + 1]}); + } + + float valueTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueTemBytes.toBytes()), 16)); //温度监测值 + + + // 2解析湿度监测值 + PgHjsbbl valueWetBlObj = blDao.findBlByBh(zcbh + ".WetValue"); + if (null == valueWetBlObj) { + continue; + } + + int vskszdz = valueWetBlObj.getKszdz(); //开始字地址 + int vsjszdz = valueWetBlObj.getJszdz(); //结束字地址 + int vsn = vsjszdz - (vskszdz - 1); //字数 + int vsoffset = vskszdz - start; //与开始字的偏移量 + + Bytes valueWetBytes = new Bytes(); + for (int j = vsn; j > 0; j--) { + valueWetBytes.append(new byte[] {messageData[(vsoffset + j - 1) * 2], messageData[(vsoffset + j - 1) * 2 + 1]}); + } + + float valueWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueWetBytes.toBytes()), 16)); //湿度监测值 + + // 3解析温度报警阈值 + PgHjsbbl thresholdTemBlObj = blDao.findBlByBh(zcbh + ".TemSet"); + if (null == thresholdTemBlObj) { + continue; + } + + int twkszdz = thresholdTemBlObj.getKszdz(); //开始字地址 + int twjszdz= thresholdTemBlObj.getJszdz(); //结束字地址 + int twn = twjszdz - (twkszdz - 1); //字数 + int twoffset = twkszdz - start; //与开始字的偏移量 + + Bytes thresholdTemBytes = new Bytes(); + for (int k = twn; k > 0; k--) { + thresholdTemBytes.append(new byte[] {messageData[(twoffset + k - 1) * 2], messageData[(twoffset + k - 1) * 2 + 1]}); + } + + float thresholdTem = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdTemBytes.toBytes()), 16)); //温度报警阈值 + + + // 4解析湿度报警阈值 + PgHjsbbl thresholdWetBlObj = blDao.findBlByBh(zcbh + ".WetSet"); + if (null == thresholdWetBlObj) { + continue; + } + + int tskszdz = thresholdWetBlObj.getKszdz(); //开始字地址 + int tsjszdz= thresholdWetBlObj.getJszdz(); //结束字地址 + int tsn = tsjszdz - (tskszdz - 1); //字数 + int tsoffset = tskszdz - start; //与开始字的偏移量 + + Bytes thresholdWetBytes = new Bytes(); + for (int k = tsn; k > 0; k--) { + thresholdWetBytes.append(new byte[] {messageData[(tsoffset + k - 1) * 2], messageData[(tsoffset + k - 1) * 2 + 1]}); + } + + float thresholdWet = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdWetBytes.toBytes()), 16)); //湿度报警阈值 + + getWd().add(valueTem); + getSd().add(valueWet); + getWdbjz().add(thresholdTem); + getSdbjz().add(thresholdWet); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index e0547af..4a489f6 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -3,22 +3,33 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + import com.szpg.db.dao.PgYwDao; import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.impl.PgYwDaoImpl; +import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadYWStatusCommandResponse extends ReadMemoryCommandResponse { - + /** * */ - private static final long serialVersionUID = 8088340048416088978L; + private static final long serialVersionUID = 2363774800273830916L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); private List ywbj; // 爆管液位报警状态 - + private String[] zcList; //爆管液位监测的资产列表,从配置文件中获取 + public ReadYWStatusCommandResponse() { ywbj = new ArrayList(); } @@ -30,28 +41,82 @@ public void setYwbj(List ywbj) { this.ywbj = ywbj; } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } @Override public void afterAction() { // 1将爆管液位浓度数据存入数据库 PgYwDao ywDao = new PgYwDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); - - List ids = deviceDao.findDeviceIdByDestAndType(this.getMessageProducerId(), "YW"); - - for (int i = 0; i < ywbj.size(); i++) { - if (i < ids.size()) { - ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); - - // 有报警状态 - if (ywbj.get(i) == true) { - // TODO - // 1存入报警管理表 - - - } + + // 遍历资产列表,将爆管液位报警状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + ywDao.addSbjzRecord(ywbj.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU爆管液位报警状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".YWALM.START")); + + // 获取目标ACU爆管液位相关的资产列表,即爆管液位设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".YW.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析爆管液位报警状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析爆管液位报警状态 + PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); + if (null == almBlObj) { + continue; + } + + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().add(bjBt == '1' ? true : false); + } + } + } diff --git a/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java new file mode 100644 index 0000000..ad368dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmRtCommandResponse.java @@ -0,0 +1,153 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmRtCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 92136364985015413L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmscs; // 照明运行时长——秒数 + private List zmsch; // 照明运行时长——小时数 + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmRtCommandResponse() { + zmscs = new ArrayList(); + zmsch = new ArrayList(); + } + + public List getZmscs() { + return zmscs; + } + + public void setZmscs(List zmscs) { + this.zmscs = zmscs; + } + + public List getZmsch() { + return zmsch; + } + + public void setZmsch(List zmsch) { + this.zmsch = zmsch; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明累计运行时长数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行时长存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addRtRecord(zmscs.get(i), zmsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行时间内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMRT.START")); + + // 获取目标ACU照明相关的资产列表,即照明设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行时长相关变量 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行时长的小时数 + PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); + if (null == hourBlObj) { + continue; + } + + int hkszdz = hourBlObj.getKszdz(); //开始字地址 + int hjszdz = hourBlObj.getJszdz(); //结束字地址 + int hn = hjszdz - (hkszdz - 1); //字数 + int hoffset = hkszdz - start; //与开始字的偏移量 + + Bytes hourBytes = new Bytes(); + for (int j = hn; j > 0; j--) { + hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); + } + + int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 + + // 解析照明运行时长的秒数 + PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); + if (null == secondBlObj) { + continue; + } + + int skszdz = secondBlObj.getKszdz(); //开始字地址 + int sjszdz= secondBlObj.getJszdz(); //结束字地址 + int sn = sjszdz - (skszdz - 1); //字数 + int soffset = skszdz - start; //与开始字的偏移量 + + Bytes secondBytes = new Bytes(); + for (int k = sn; k > 0; k--) { + secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); + } + + int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 + + getZmsch().add(hour); + getZmscs().add(second); + } + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java new file mode 100644 index 0000000..951a3dc --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -0,0 +1,124 @@ +package com.szpg.plc.message.response.read; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgZmDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgZmDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.plc.util.ByteUtil; +import com.szpg.util.Configure; +import com.szpg.util.TimeFormat; + +public class ReadZmStatCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = -3887112876994787055L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List zmRun; + private String[] zcList; //资产列表,从配置文件中获取 + + public ReadZmStatCommandResponse() { + zmRun = new ArrayList(); + } + + public List getZmRun() { + return zmRun; + } + + public void setZmRun(List zmRun) { + this.zmRun = zmRun; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将照明运行状态数据存入数据库 + PgZmDao zmDao = new PgZmDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历设备列表,将照明运行状态存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + int id = deviceDao.findDeviceIdByCode(zcbh); + if (id > 0) { + zmDao.addStatRecord(zmRun.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); + } + } + } + } + + @Override + public void parseData(byte[] messageData) { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 将数据转换为字符串 + // 按照高字在前,低字在后;高字节在前,低字节在后的顺序 + String dataStr = ""; + for (int c = 0; c < messageData.length; c = c + 2) { + dataStr = ByteUtil.binToBinString(new byte[] {messageData[c], messageData[c + 1]}) + dataStr; + } + + PgHjsbblDao blDao = new PgHjsbblDaoImpl(); + + // 获取目标ACU照明运行状态内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".ZMSTAT.START")); + + // 获取目标ACU照明相关的资产列表,即风机列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".ZM.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析照明运行状态 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 解析照明运行状态 + PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); + if (null == runBlObj) { + continue; + } + + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().add(runBt == '1' ? true : false); + } + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index f565b8b..ebbce65 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,5 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 - public final static byte SID = 0x00; //SID字节固定为00 } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 3b3f26b..ee2e41f 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -4,12 +4,9 @@ import java.util.Calendar; import java.util.List; -import org.apache.log4j.Logger; - import com.szpg.db.dao.PgAcuRdcmdDao; import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.db.data.PgFjStat; import com.szpg.plc.message.AppMessage; import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.UnKnownMessage; @@ -27,9 +24,13 @@ import com.szpg.plc.message.response.read.ReadHSValueCommandResponse; import com.szpg.plc.message.response.read.ReadO2StatusCommandResponse; import com.szpg.plc.message.response.read.ReadO2ValueCommandResponse; +import com.szpg.plc.message.response.read.ReadSbRtCommandResponse; +import com.szpg.plc.message.response.read.ReadSbStatCommandResponse; import com.szpg.plc.message.response.read.ReadWSStatusCommandResponse; import com.szpg.plc.message.response.read.ReadWSValueCommandResponse; import com.szpg.plc.message.response.read.ReadYWStatusCommandResponse; +import com.szpg.plc.message.response.read.ReadZmRtCommandResponse; +import com.szpg.plc.message.response.read.ReadZmStatCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.fins.frame.FINSByteFrame; import com.szpg.plc.protocol.fins.frame.FINSByteFrameTool; @@ -38,7 +39,7 @@ public class FINSDTProtocolImp implements DTProtocolInterface { - private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message +// private final Logger logger = Logger.getLogger(this.getClass().getName()); // 输出到message /** * 从重叠消息中提取规范消息 @@ -126,7 +127,6 @@ // 1首先解析出消息的PLC端地址(即响应消息的源地址)和返回的内存内容的字数 String dest = FINSByteFrameTool.getControlSour(byteMessage); //命令的目标地址即响应消息的源地址 -// int count = FINSByteFrameTool.getDataWithoutEndCode(byteMessage).length / 2; //1WORD=2BYTE // 2查询数据中最近的有效的读内存命令,获取其读取的参数类型 PgAcuRdcmdDao readCmdDao = new PgAcuRdcmdDaoImpl(); @@ -183,6 +183,20 @@ case AppMessageConstants.CMD_TYPE_READFJRUNTIME: received = bytesToReadFjRtCommandResponse(finsFrame, readCmd); break; + + case AppMessageConstants.CMD_TYPE_READSBSTAT: + received = bytesToReadSbStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READSBRUNTIME: + received = bytesToReadSbRtCommandResponse(finsFrame, readCmd); + break; + + case AppMessageConstants.CMD_TYPE_READZMSTAT: + received = bytesToReadZmStatCommandResponse(finsFrame, readCmd); + break; + case AppMessageConstants.CMD_TYPE_READZMRUNTIME: + received = bytesToReadZmRtCommandResponse(finsFrame, readCmd); + break; } // 4将已响应的命令删除 @@ -217,18 +231,7 @@ LinkCommandResponse lcr = new LinkCommandResponse(); byte[] data = finsFrame.TEXT_DATA_BODY; - if (data.length == 8) { - String sour = ByteUtil.binToHexString(data, 8, 16); //握手响应消息的源地址,实际上是PLC地址 - String dest = ByteUtil.binToHexString(data, 0, 8); //握手响应消息的目标地址,实际上是本机地址 - - lcr.setMessageProducerId(sour); - lcr.setDestinationId(dest); - lcr.setTime(Calendar.getInstance()); - lcr.setValid(true); - } else { - lcr.setValid(false); - logger.debug("握手命令响应消息数据域长度不符"); - } + lcr.parseData(data); return lcr; } @@ -240,27 +243,25 @@ * @return */ private AppMessage bytesToReadCH4ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCH4ValueCommandResponse rcpcr = new ReadCH4ValueCommandResponse(); + ReadCH4ValueCommandResponse rcvcr = new ReadCH4ValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //甲烷浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //甲烷报警阈值 - - rcpcr.getJwnd().add(value); - rcpcr.getJwldbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); + } else { + rcvcr.setValid(false); } - return rcpcr; + return rcvcr; } @@ -273,26 +274,20 @@ private AppMessage bytesToReadCH4StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCH4StatusCommandResponse rcscr = new ReadCH4StatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //甲烷监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getJwbj().add(bjBit == '1' ? true : false); - rcscr.getJwldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); + } else { + rcscr.setValid(false); } return rcscr; @@ -307,39 +302,18 @@ private AppMessage bytesToReadWSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSValueCommandResponse rwvcr = new ReadWSValueCommandResponse(); + // 设置ACU代码 + rwvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //获取传感器数量 + rwvcr.parseData(data); - int offset = cmd.getOffset(); //获取湿度变量的内存地址偏移量 - offset = offset + wsct * 2 * 2 * 2; - - // 解析并存储温度值 - for (int i = 0; i < wsct; i++) { - byte[] tempValueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] tempThresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float tempValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempValueByte), 16)); //温度监测值 - float tempThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(tempThresholdByte), 16)); //温度报警阈值 - - rwvcr.getWd().add(tempValue); - rwvcr.getWdbjz().add(tempThreshold); - } - - // 解析并存储湿度值 - for (int i = 0; i < wsct; i++) { - byte[] humValueByte = new byte[] { data[i*8 + 2 + offset], data[i*8 + 3 + offset], data[i*8 + offset], data[i*8 + 1 + offset] }; - byte[] humThresholdByte = new byte[] { data[i*8 + 6 + offset], data[i*8 + 7 + offset], data[i*8 + 4 + offset], data[i*8 + 5 + offset] }; - - float humValue = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humValueByte), 16)); //湿度监测值 - float humThreshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(humThresholdByte), 16)); //湿度报警阈值 - - rwvcr.getSd().add(humValue); - rwvcr.getSdbjz().add(humThreshold); - } + // 设置响应对应的命令ID + rwvcr.setCmdId(cmd.getId()); } return rwvcr; @@ -349,32 +323,18 @@ private AppMessage bytesToReadWSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadWSStatusCommandResponse rwsscr = new ReadWSStatusCommandResponse(); + // 设置ACU代码 + rwsscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rwsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int wsct = cmd.getCount_sensor(); //温湿度监测点的数量 + rwsscr.parseData(data); - // 处理温度状态 - String tempDataStr = ByteUtil.binToBinString(new byte[] { data[0], data[1] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 1); - char bjBit = tempDataStr.charAt(tempDataStr.length() - 2 * i - 2); - - rwsscr.getWdbj().add(bjBit == '1' ? true : false); - rwsscr.getWdldbj().add(ldBit == '1' ? true : false); - } - - // 处理湿度状态 - String humDataStr = ByteUtil.binToBinString(new byte[] { data[4], data[5] }); //D15-D0顺序 - for (int i = 0; i < wsct; i++) { - char ldBit = humDataStr.charAt(humDataStr.length() - 2 * i - 1); - char bjBit = humDataStr.charAt(humDataStr.length() - 2 * i - 2); - - rwsscr.getSdbj().add(bjBit == '1' ? true : false); - rwsscr.getSdldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rwsscr.setCmdId(cmd.getId()); } return rwsscr; @@ -388,27 +348,23 @@ * @return */ private AppMessage bytesToReadCOValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { - ReadCOValueCommandResponse rcovc = new ReadCOValueCommandResponse(); + ReadCOValueCommandResponse rcvcr = new ReadCOValueCommandResponse(); + + // 设置ACU代码 + rcvcr.setAcucode(cmd.getDest_acu_code()); byte[] body = finsFrame.TEXT_DATA_BODY; - rcovc.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + rcvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - for (int i = 0; i < chct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //一氧化碳浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //一氧化碳报警阈值 - - rcovc.getCond().add(value); - rcovc.getColdbjz().add(threshold); - } + rcvcr.parseData(data); + + // 设置响应对应的命令ID + rcvcr.setCmdId(cmd.getId()); } - return rcovc; + return rcvcr; } @@ -421,26 +377,18 @@ private AppMessage bytesToReadCOStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadCOStatusCommandResponse rcscr = new ReadCOStatusCommandResponse(); + // 设置ACU代码 + rcscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rcscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int chct = cmd.getCount_sensor(); //一氧化碳监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rcscr.parseData(data); - for (int i = 0; i < chct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rcscr.getCobj().add(bjBit == '1' ? true : false); - rcscr.getColdbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rcscr.setCmdId(cmd.getId()); } return rcscr; @@ -456,22 +404,18 @@ private AppMessage bytesToReadO2ValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2ValueCommandResponse rovcr = new ReadO2ValueCommandResponse(); + // 设置ACU代码 + rovcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rovcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - for (int i = 0; i < o2ct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rovcr.getO2nd().add(value); - rovcr.getO2ldbjz().add(threshold); - } + rovcr.parseData(data); + + // 设置响应对应的命令ID + rovcr.setCmdId(cmd.getId()); } return rovcr; @@ -487,26 +431,18 @@ private AppMessage bytesToReadO2StatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadO2StatusCommandResponse roscr = new ReadO2StatusCommandResponse(); + // 设置ACU代码 + roscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; roscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int o2ct = cmd.getCount_sensor(); //氧气监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + roscr.parseData(data); - for (int i = 0; i < o2ct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - roscr.getO2bj().add(bjBit == '1' ? true : false); - roscr.getO2ldbj().add(ldBit == '1' ? true : false); - } + // 设置响应对应的命令ID + roscr.setCmdId(cmd.getId()); } return roscr; @@ -522,22 +458,18 @@ private AppMessage bytesToReadHSValueCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSValueCommandResponse rhvcr = new ReadHSValueCommandResponse(); + // 设置ACU代码 + rhvcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - for (int i = 0; i < hsct; i++) { - byte[] valueByte = new byte[] { data[i*8 + 2], data[i*8 + 3], data[i*8], data[i*8 + 1] }; - byte[] thresholdByte = new byte[] { data[i*8 + 6], data[i*8 + 7], data[i*8 + 4], data[i*8 + 5] }; - - float value = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(valueByte), 16)); //氧气浓度值 - float threshold = Float.intBitsToFloat(Integer.parseInt(ByteUtil.binToHexString(thresholdByte), 16)); //氧气报警阈值 - - rhvcr.getHsnd().add(value); - rhvcr.getHsldbjz().add(threshold); - } + rhvcr.parseData(data); + + // 设置响应对应的命令ID + rhvcr.setCmdId(cmd.getId()); } return rhvcr; @@ -553,25 +485,18 @@ private AppMessage bytesToReadHSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadHSStatusCommandResponse rhscr = new ReadHSStatusCommandResponse(); + // 设置ACU代码 + rhscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rhscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int hsct = cmd.getCount_sensor(); //硫化氢监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < hsct; i++) { - char ldBit = dataStr.charAt(dataStr.length() - 2 * i - 1); - char bjBit = dataStr.charAt(dataStr.length() - 2 * i - 2); - - rhscr.getHsbj().add(bjBit == '1' ? true : false); - rhscr.getHsldbj().add(ldBit == '1' ? true : false); - } + rhscr.parseData(data); + + // 设置响应对应的命令ID + rhscr.setCmdId(cmd.getId()); } return rhscr; @@ -586,23 +511,18 @@ private AppMessage bytesToReadYWStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadYWStatusCommandResponse ryscr = new ReadYWStatusCommandResponse(); + // 设置ACU代码 + ryscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; ryscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int ysct = cmd.getCount_sensor(); //爆管液位监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } - for (int i = 0; i < ysct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i - 1); - - ryscr.getYwbj().add(bjBit == '1' ? true : false); - } + ryscr.parseData(data); + + // 设置响应对应的命令ID + ryscr.setCmdId(cmd.getId()); } return ryscr; @@ -617,24 +537,18 @@ private AppMessage bytesToReadDSStatusCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadDSStatusCommandResponse rdscr = new ReadDSStatusCommandResponse(); + // 设置ACU代码 + rdscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rdscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int dsct = cmd.getCount_sensor(); //对射监测点的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rdscr.parseData(data); - for (int i = 0; i < dsct; i++) { - char bjBit = dataStr.charAt(dataStr.length() - i * 3 - 1); - - rdscr.getDsbj().add(bjBit == '1' ? true : false); - } + // 设置响应对应的命令ID + rdscr.setCmdId(cmd.getId()); } return rdscr; @@ -650,37 +564,18 @@ private AppMessage bytesToReadFjStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjStatCommandResponse rfscr = new ReadFjStatCommandResponse(); + // 设置ACU代码 + rfscr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //风机的数量 - int bitct = cmd.getCount_bit(); //读取的位的数量,用于计算字节数 - int bytect = (bitct % 16 == 0 ? bitct / 16 : bitct / 16 + 1) * 2; - String dataStr = ""; - for (int i = 0; i < bytect - 1; i = i + 2) { - dataStr = ByteUtil.binToBinString(new byte[] { data[i], data[i + 1] }) + dataStr; //D15-D0顺序 - } + rfscr.parseData(data); - for (int i = 0; i < fjct; i++) { - char amBit = dataStr.charAt(dataStr.length() - i * 8 - 1); - char runBit = dataStr.charAt(dataStr.length() - i * 8 - 2); - char fltBit = dataStr.charAt(dataStr.length() - i * 8 - 3); - char enBit = dataStr.charAt(dataStr.length() - i * 8 - 4); - char noBit = dataStr.charAt(dataStr.length() - i * 8 - 5); - char routBit = dataStr.charAt(dataStr.length() - i * 8 - 8); - - PgFjStat fjzt = new PgFjStat(); - fjzt.setAm(amBit == '1' ? true : false); - fjzt.setRun(runBit == '1' ? true : false); - fjzt.setFlt(fltBit == '1' ? true : false); - fjzt.setEn(enBit == '1' ? true : false); - fjzt.setNo(noBit == '1' ? true : false); - fjzt.setRout(routBit == '1' ? true : false); - - rfscr.getFjzt().add(fjzt); - } + // 设置响应对应的命令ID + rfscr.setCmdId(cmd.getId()); } return rfscr; @@ -696,37 +591,130 @@ private AppMessage bytesToReadFjRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { ReadFjRtCommandResponse rfrcr = new ReadFjRtCommandResponse(); + // 设置ACU代码 + rfrcr.setAcucode(cmd.getDest_acu_code()); + byte[] body = finsFrame.TEXT_DATA_BODY; rfrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 - int fjct = cmd.getCount_sensor(); //获取风机数量 + rfrcr.parseData(data); - int offset = cmd.getOffset(); //获取风机小时数变量的内存地址偏移量 - offset = offset + fjct * 2; - - // 解析并存储风机运行时长秒数 - for (int i = 0; i < fjct; i++) { - byte[] secondByte = new byte[] { data[i*2], data[i*2 + 1] }; - - int second = ByteUtil.binToInt(secondByte); // 运行时长的秒数 - - rfrcr.getFjscs().add(second); - } - - // 解析并存储风机运行时长小时数 - for (int i = 0; i < fjct; i++) { - byte[] hourByte = new byte[] { data[i*4 + 2 + offset], data[i*4 + 3 + offset], data[i*4 + offset], data[i*4 + 1 + offset] }; - - int hourValue = ByteUtil.binToInt(hourByte); //运行时长的小时数 - - rfrcr.getFjsch().add(hourValue); - } + // 设置响应对应的命令ID + rfrcr.setCmdId(cmd.getId()); } return rfrcr; } + + + /** + * 将查询水泵运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadSbStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbStatCommandResponse rsscr = new ReadSbStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取水泵运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadSbRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadSbRtCommandResponse rsrcr = new ReadSbRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } + + + /** + * 将查询照明运行状态响应消息字节数组转换为消息对象 + * + * @param byteMessage + * @return + */ + private AppMessage bytesToReadZmStatCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmStatCommandResponse rsscr = new ReadZmStatCommandResponse(); + + // 设置ACU代码 + rsscr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsscr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsscr.parseData(data); + + // 设置响应对应的命令ID + rsscr.setCmdId(cmd.getId()); + } + + return rsscr; + } + + + /** + * 将读取照明运行时长响应字节数组转换为消息对象 + * + * @param finsFrame + * @return + */ + private AppMessage bytesToReadZmRtCommandResponse(FINSByteFrame finsFrame, PgAcuRdcmd cmd) { + ReadZmRtCommandResponse rsrcr = new ReadZmRtCommandResponse(); + + // 设置ACU代码 + rsrcr.setAcucode(cmd.getDest_acu_code()); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rsrcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rsrcr.parseData(data); + + // 设置响应对应的命令ID + rsrcr.setCmdId(cmd.getId()); + } + + return rsrcr; + } /** * 将消息对象解析为字节数组 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index 94540d4..c06c8d6 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -77,7 +77,7 @@ public byte TEXT_CONTROL_SNA; public byte TEXT_CONTROL_SA1; public byte TEXT_CONTROL_SA2; - public byte TEXT_CONTROL_SID = FINSConstants.SID; + public byte TEXT_CONTROL_SID; public byte[] FINS_COMMAND_CODE = new byte[2]; public byte MEMORY_AREA_CODE; diff --git a/src/com/szpg/plc/server/ACUClient.java b/src/com/szpg/plc/server/ACUClient.java index 1278178..970d73e 100644 --- a/src/com/szpg/plc/server/ACUClient.java +++ b/src/com/szpg/plc/server/ACUClient.java @@ -23,6 +23,7 @@ private Channel channel; + private String acucode; // ACU编码 private String net; //网络号 private String node; //节点号 private String unit; //单元号 @@ -31,7 +32,7 @@ this.host = host; this.port = port; } - + public Channel getChannel() { return channel; } @@ -39,6 +40,14 @@ public void setChannel(Channel channel) { this.channel = channel; } + + public String getAcucode() { + return acucode; + } + + public void setAcucode(String acucode) { + this.acucode = acucode; + } public String getNet() { return net; @@ -66,7 +75,7 @@ @Override public String toString() { - return "ACUClient[host=" + host + ", port=" + port + "]"; + return "ACUClient[code=" + acucode + ", host=" + host + ", port=" + port + "]"; } /** diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index d7649fd..69a40cc 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; +import com.szpg.plc.message.CommandResponse; import com.szpg.plc.message.command.LinkCommand; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; @@ -69,8 +70,14 @@ AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); if (null != message) { + // 如果是命令响应,则将命令响应存入响应消息池 + if (message instanceof CommandResponse) { + CommandResponse cr = (CommandResponse) message; + ACUClientUtil.getInstance().responsePool.putResponse(cr.getCmdId(), cr); + } + // 命令解析后处理 - message.afterAction(); + //message.afterAction(); } } } diff --git a/src/com/szpg/plc/server/ACUClientUtil.java b/src/com/szpg/plc/server/ACUClientUtil.java index 576cb3f..c8545de 100644 --- a/src/com/szpg/plc/server/ACUClientUtil.java +++ b/src/com/szpg/plc/server/ACUClientUtil.java @@ -8,7 +8,6 @@ import com.szpg.plc.util.ByteUtil; import io.netty.buffer.Unpooled; -import z.json.JSONObject; public class ACUClientUtil { @@ -20,10 +19,10 @@ private Map clients; - public FINSCommandPool pool; + public ACUCommandResponsePool responsePool; private ACUClientUtil() { - pool = new FINSCommandPool(); + responsePool = new ACUCommandResponsePool(); clients = new ConcurrentHashMap(); } @@ -93,22 +92,4 @@ } } - /** - * 将响应发回WEB端,并从响应消息池中将其删除 - * - * @param sessionId - * @param rtu - * @param type - * @return - */ - public String getResponse(String sessionId, String rtu, String type) { - String key = sessionId + "-" + rtu + "-" + type; - if (pool.getMessageToResponse().containsKey(key)) { - JSONObject item = pool.getMessageToResponse().get(key); - pool.getMessageToResponse().remove(key); - return item.toString(); - } else { - return null; - } - } } diff --git a/src/com/szpg/plc/server/ACUCommandResponsePool.java b/src/com/szpg/plc/server/ACUCommandResponsePool.java new file mode 100644 index 0000000..478aedd --- /dev/null +++ b/src/com/szpg/plc/server/ACUCommandResponsePool.java @@ -0,0 +1,61 @@ +package com.szpg.plc.server; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.plc.message.CommandResponse; +import com.szpg.util.Configure; + +public class ACUCommandResponsePool { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message + + private Map responseList; // 响应队列 + + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "MESSAGEPOOL.REFRESH_TIME", "15")); //刷新时间 + + public ACUCommandResponsePool() { + responseList = new HashMap(); + + // 启动定时刷新任务 + new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); + } + + public synchronized void putResponse(String key, CommandResponse message) { + responseList.put(key, message); + logger.debug("[++" + responseList.size() + "]" + key); + } + + public synchronized CommandResponse getResponse(String key) { + if (responseList.containsKey(key)) { + CommandResponse cr = responseList.get(key); + responseList.remove(key); + + logger.debug("[--" + responseList.size() + "]" + key); + return cr; + } else { + return null; + } + } + + + class RefreshPoolTask implements Runnable { + + PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + + @Override + public synchronized void run() { + cmdDao.deleteTimeoutCmd(); + + logger.debug("清除数据库中的超时命令"); + } + } +} + + diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java deleted file mode 100644 index 5e6c828..0000000 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.szpg.plc.server; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.log4j.Logger; - -import com.szpg.util.Configure; - -import z.json.JSONException; -import z.json.JSONObject; - -public class FINSCommandPool { - - private Map> messageToSend; //发送命令池 - private Map messageToResponse; //响应消息池 - - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); - //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); - - public FINSCommandPool() { - messageToSend = new HashMap>(); - messageToResponse = new HashMap(); - } - - private final Logger logger = Logger.getLogger(this.getClass().getName()); //输出到message - - public Map getMessageToResponse() { - return messageToResponse; - } - /** - * 在发送命令池中添加新的消息(JSON对象形式) - * @param messageStr json格式的字符串 - * @throws JSONException - */ - public synchronized void pushMessage(String messageStr) throws JSONException { - JSONObject jMessage = new JSONObject(messageStr); - - String sessionId = jMessage.getString("sessionId"); - String rtuAddress = jMessage.getString("rtu"); - String type = jMessage.getString("type"); - String time = String.valueOf(Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - // 更新map - messageToSend.put(sessionId, list); - } else { - List list = new ArrayList(); - - JSONObject item = new JSONObject(); - item.put("rtu", rtuAddress); - item.put("type", type); - item.put("timestamp", time); - - list.add(item); - - messageToSend.put(sessionId, list); - } - } - /** - * 匹配响应的消息字符串(json形式),若找到,则压入响应消息池中,并将发送命令池中相应的消息删除,证明此次请求全部结束 - * @param responseStr 响应字符串 - * @throws JSONException - */ - public synchronized void match(String responseStr) throws JSONException { - JSONObject jResponse = new JSONObject(responseStr); - - String sessionId = jResponse.getString("sessionId"); - String rtuAddress = jResponse.getString("rtu"); - String type = jResponse.getString("type"); - jResponse.put("timestamp", Calendar.getInstance().getTimeInMillis()); - - if (messageToSend.containsKey(sessionId) && messageToSend.get(sessionId).isEmpty() == false) { - List list = messageToSend.get(sessionId); - for (int i = list.size(); i > 0; i--) { - JSONObject message = list.get(i - 1); //从命令队列尾部开始遍历 - if (message.getString("rtu").equals(rtuAddress)) { - if (message.getString("type").equalsIgnoreCase(type) == false) { - continue; - } else { - //找到匹配的消息 - //1将响应消息压入响应消息池 - messageToResponse.put(sessionId + "-" + rtuAddress + "-" + type, jResponse); - - //2删除发送命令池中的对象 - list.remove(i - 1); - - break; - } - } - } - } - } - - //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期 - //核心线程池的大小为1 - public synchronized void refresh() { - new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new RefreshPoolTask(), 0, FRESH_MIN, TimeUnit.MINUTES); - } - //该线程通过被refresh()方法调用,移除发送命令池和响应消息池中的超时消息 - class RefreshPoolTask implements Runnable { - @Override - public synchronized void run() { - Set keySet = messageToSend.keySet(); - for (String key : keySet) { - List list = messageToSend.get(key); - - for (JSONObject item : list) { - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - list.remove(item); - logger.debug("移除该超时命令:" + item.toString()); - } - } catch (NumberFormatException e) { - logger.error("定时整理消息队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理消息队列时获取时间戳异常", e); - } - } - - // 若队列为空则清除 - if (list.isEmpty() == true) { - messageToSend.remove(key); - } - } - - Set resKeySet = messageToResponse.keySet(); - for (String key : resKeySet) { - JSONObject item = messageToResponse.get(key); - - try { - long timestamp = Long.parseLong(item.getString("timestamp")); - - // 超时移除命令 - if (Calendar.getInstance().getTimeInMillis() - timestamp > VALID_MIN * 1000 * 60) { - messageToResponse.remove(key); - logger.debug("移除超时响应:" + key); - } - } catch (NumberFormatException e) { - logger.error("定时整理响应队列时时间戳转换为整数异常", e); - } catch (JSONException e) { - logger.error("定时整理响应队列时获取时间戳异常", e); - } - } - } - - } -} - - diff --git a/src/com/szpg/service/ReadControllerRuntimeService.java b/src/com/szpg/service/ReadControllerRuntimeService.java new file mode 100644 index 0000000..d216167 --- /dev/null +++ b/src/com/szpg/service/ReadControllerRuntimeService.java @@ -0,0 +1,89 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器运行时长的服务过程 + * + * @author admin + * + */ +public class ReadControllerRuntimeService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + } else { + // 7超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadControllerStatusService.java b/src/com/szpg/service/ReadControllerStatusService.java new file mode 100644 index 0000000..3223bfd --- /dev/null +++ b/src/com/szpg/service/ReadControllerStatusService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取控制器状态的服务过程 + * + * @author admin + * + */ +public class ReadControllerStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadDsAlmService.java b/src/com/szpg/service/ReadDsAlmService.java new file mode 100644 index 0000000..d6b4252 --- /dev/null +++ b/src/com/szpg/service/ReadDsAlmService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取对射报警状态的服务过程 + * + * @author admin + * + */ +public class ReadDsAlmService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9在指定时间之后将报警信息清除 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorStatusService.java b/src/com/szpg/service/ReadSensorStatusService.java new file mode 100644 index 0000000..00410ec --- /dev/null +++ b/src/com/szpg/service/ReadSensorStatusService.java @@ -0,0 +1,96 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量报警状态的服务过程 + * + * @author admin + * + */ +public class ReadSensorStatusService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果没有报警值则退出 + + // 8如果有报警值则推送报警信息 + + // 9发送命令查询报警时的监测值 + + } else { + // 10超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/service/ReadSensorValueService.java b/src/com/szpg/service/ReadSensorValueService.java new file mode 100644 index 0000000..8483dfc --- /dev/null +++ b/src/com/szpg/service/ReadSensorValueService.java @@ -0,0 +1,94 @@ +package com.szpg.service; + +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.CommandResponse; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; + +/** + * 读取环境变量监测值的服务过程 + * + * @author admin + * + */ +public class ReadSensorValueService { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private PgAcuRdcmdDao cmdDao = new PgAcuRdcmdDaoImpl(); + private PgAcuDao acuDao = new PgAcuDaoImpl(); + + public void executeService(ACUClient client, ReadMemoryCommand command) { + // 解析命令对象为字节数组 + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(command); + + // 通过socket接口发送出去 + ACUClientUtil.getInstance().sendACUCommand(client, content); + + // 1查找数据库中的ACU对象 + PgAcu acu = acuDao.findACUByDest(command.getDestinationId()); + if (null == acu) { + return; + } + + // 2生成读取命令对象 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setCmd_type(command.getCommandType()); + cmd.setDest_acu_code(acu.getAcu_code()); + cmd.setTm(command.getTime().getTime()); + + // 3将命令保存入数据库 + cmdDao.addCmdRecord(cmd); + + // 4阻塞,循环查找响应消息池,找到对应的响应消息 + boolean flag = false; + int times = 0; + CommandResponse response = null; + while (flag == false && times < 240) { + response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId()); + + if (null != response && response.equals("") == false) { + flag = true; + } + + times++; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO 阻塞线程被打断,需要处理异常 + // 目前的处理流程为1)记录日志;2)将命令置为超时 + logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + + return; + } + } + + // 5若未超时,将值存入数据库 + if (null != response) { + // 6根据命令类型的不同将监测值存入对应的数据库 + response.afterAction(); + + // 7如果监测值未发生变化则退出 + + // 8如果监测值发生变化则调用接口将变量值推送出去 + + } else { + // 9超时,将命令的超时标志位置1 + logger.warn("命令超时" + cmd.getId()); + cmdDao.updateCmdRecordTimeout(cmd.getId()); + } + } + +} diff --git a/src/com/szpg/task/ReadCH4StatusTask.java b/src/com/szpg/task/ReadCH4StatusTask.java index d861d8b..f65e750 100644 --- a/src/com/szpg/task/ReadCH4StatusTask.java +++ b/src/com/szpg/task/ReadCH4StatusTask.java @@ -1,47 +1,52 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCH4StatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCH4StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4StatusCommand ch4AlmCmd = (ReadCH4StatusCommand) appCommand; + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CHALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4AlmCmd.getCommandType()); - cmd.setDest(ch4AlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4AlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4AlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4AlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4AlmCmd.getCountWord()); - cmd.setCount_bit(ch4AlmCmd.getCountBit()); - cmd.setCount_sensor(ch4AlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCH4ValueTask.java b/src/com/szpg/task/ReadCH4ValueTask.java index 4cb658e..ce6fe75 100644 --- a/src/com/szpg/task/ReadCH4ValueTask.java +++ b/src/com/szpg/task/ReadCH4ValueTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCH4ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCH4ValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCH4ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCH4ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCH4ValueCommand ch4Cmd = (ReadCH4ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ch4Cmd.getCommandType()); - cmd.setDest(ch4Cmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); - cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); - cmd.setCount_word(ch4Cmd.getCountWord()); - cmd.setCount_bit(ch4Cmd.getCountBit()); - cmd.setCount_sensor(ch4Cmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCH4VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CH.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOStatusTask.java b/src/com/szpg/task/ReadCOStatusTask.java index c01765c..70e52ad 100644 --- a/src/com/szpg/task/ReadCOStatusTask.java +++ b/src/com/szpg/task/ReadCOStatusTask.java @@ -1,47 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Calendar; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadCOStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadCOStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadCOStatusCommand coAlmCmd = (ReadCOStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setTime(Calendar.getInstance()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".COALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadCOValueTask.java b/src/com/szpg/task/ReadCOValueTask.java index 76b9a1b..bac50ae 100644 --- a/src/com/szpg/task/ReadCOValueTask.java +++ b/src/com/szpg/task/ReadCOValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadCOValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadCOValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadCOValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadCOValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取一氧化碳参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadCOValueCommand coCmd = (ReadCOValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READCOVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".CO.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadDSStatusTask.java b/src/com/szpg/task/ReadDSStatusTask.java index 2437096..8229a8d 100644 --- a/src/com/szpg/task/ReadDSStatusTask.java +++ b/src/com/szpg/task/ReadDSStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadDSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadDsAlmService; +import com.szpg.util.Configure; public class ReadDSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadDSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadDsAlmService service; + + public ReadDSStatusTask() { + service = new ReadDsAlmService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取对射报警状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadDSStatusCommand dsAlmCmd = (ReadDSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(dsAlmCmd.getCommandType()); - cmd.setDest(dsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { dsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(dsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(dsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(dsAlmCmd.getCountWord()); - cmd.setCount_bit(dsAlmCmd.getCountBit()); - cmd.setCount_sensor(dsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DS.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjRtTask.java b/src/com/szpg/task/ReadFjRtTask.java index afa5bce..8127b09 100644 --- a/src/com/szpg/task/ReadFjRtTask.java +++ b/src/com/szpg/task/ReadFjRtTask.java @@ -1,48 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjRtCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; public class ReadFjRtTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerRuntimeService service; - public ReadFjRtTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjRtTask() { + service = new ReadControllerRuntimeService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行时长内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadFjRtCommand fjRtCmd = (ReadFjRtCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjRtCmd.getCommandType()); - cmd.setDest(fjRtCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjRtCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjRtCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjRtCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjRtCmd.getCountWord()); - cmd.setCount_bit(fjRtCmd.getCountBit()); - cmd.setCount_sensor(fjRtCmd.getCountSensor()); - cmd.setOffset(fjRtCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".FJ.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadFjStatTask.java b/src/com/szpg/task/ReadFjStatTask.java index 646b02b..9558a0a 100644 --- a/src/com/szpg/task/ReadFjStatTask.java +++ b/src/com/szpg/task/ReadFjStatTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadFjStatCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadFjStatTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadControllerStatusService service; - public ReadFjStatTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadFjStatTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取风机运行状态内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadFjStatCommand fjStatCmd = (ReadFjStatCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(fjStatCmd.getCommandType()); - cmd.setDest(fjStatCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { fjStatCmd.getMemoryArea() })); - cmd.setStart_mem_word(fjStatCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(fjStatCmd.getStartAddress().substring(4)); - cmd.setCount_word(fjStatCmd.getCountWord()); - cmd.setCount_bit(fjStatCmd.getCountBit()); - cmd.setCount_sensor(fjStatCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READFJSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadHSStatusTask.java b/src/com/szpg/task/ReadHSStatusTask.java index 3771f2f..94629cc 100644 --- a/src/com/szpg/task/ReadHSStatusTask.java +++ b/src/com/szpg/task/ReadHSStatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadHSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadHSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSStatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadHSStatusCommand hsAlmCmd = (ReadHSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsAlmCmd.getCommandType()); - cmd.setDest(hsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsAlmCmd.getCountWord()); - cmd.setCount_bit(hsAlmCmd.getCountBit()); - cmd.setCount_sensor(hsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadHSValueTask.java b/src/com/szpg/task/ReadHSValueTask.java index bd7b72d..c7f1149 100644 --- a/src/com/szpg/task/ReadHSValueTask.java +++ b/src/com/szpg/task/ReadHSValueTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadHSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadHSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadHSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadHSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READHSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".HS.COUNT"))); - // 发送读取硫化氢参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadHSValueCommand hsCmd = (ReadHSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(hsCmd.getCommandType()); - cmd.setDest(hsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { hsCmd.getMemoryArea() })); - cmd.setStart_mem_word(hsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(hsCmd.getStartAddress().substring(4)); - cmd.setCount_word(hsCmd.getCountWord()); - cmd.setCount_bit(hsCmd.getCountBit()); - cmd.setCount_sensor(hsCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadO2StatusTask.java b/src/com/szpg/task/ReadO2StatusTask.java index ece2f4c..951cf10 100644 --- a/src/com/szpg/task/ReadO2StatusTask.java +++ b/src/com/szpg/task/ReadO2StatusTask.java @@ -1,47 +1,49 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2StatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadO2StatusTask implements Runnable { + + private ReadSensorStatusService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2StatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2StatusTask() { + service = new ReadSensorStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadO2StatusCommand coAlmCmd = (ReadO2StatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coAlmCmd.getCommandType()); - cmd.setDest(coAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(coAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(coAlmCmd.getCountWord()); - cmd.setCount_bit(coAlmCmd.getCountBit()); - cmd.setCount_sensor(coAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2STATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadO2ValueTask.java b/src/com/szpg/task/ReadO2ValueTask.java index c8aa1a4..0da31f2 100644 --- a/src/com/szpg/task/ReadO2ValueTask.java +++ b/src/com/szpg/task/ReadO2ValueTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadO2ValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadO2ValueTask implements Runnable { + + private ReadSensorValueService service; - private ACUClient client; - private AppCommand appCommand; - - public ReadO2ValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadO2ValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取氧气参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadO2ValueCommand coCmd = (ReadO2ValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(coCmd.getCommandType()); - cmd.setDest(coCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { coCmd.getMemoryArea() })); - cmd.setStart_mem_word(coCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(coCmd.getStartAddress().substring(4)); - cmd.setCount_word(coCmd.getCountWord()); - cmd.setCount_bit(coCmd.getCountBit()); - cmd.setCount_sensor(coCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READO2VALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YQ.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadSbRtTask.java b/src/com/szpg/task/ReadSbRtTask.java new file mode 100644 index 0000000..6dd46cc --- /dev/null +++ b/src/com/szpg/task/ReadSbRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadSbRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadSbRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadSbStatTask.java b/src/com/szpg/task/ReadSbStatTask.java new file mode 100644 index 0000000..5c7c518 --- /dev/null +++ b/src/com/szpg/task/ReadSbStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadSbStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadSbStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READSBSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SBSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".SB.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadWSStatusTask.java b/src/com/szpg/task/ReadWSStatusTask.java index 4c33e98..608c978 100644 --- a/src/com/szpg/task/ReadWSStatusTask.java +++ b/src/com/szpg/task/ReadWSStatusTask.java @@ -1,47 +1,48 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorStatusService; +import com.szpg.util.Configure; public class ReadWSStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorStatusService service; - public ReadWSStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSStatusTask() { + service = new ReadSensorStatusService(); } - + @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取温湿度参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); - - ReadWSStatusCommand wsAlmCmd = (ReadWSStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsAlmCmd.getCommandType()); - cmd.setDest(wsAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsAlmCmd.getCountWord()); - cmd.setCount_bit(wsAlmCmd.getCountBit()); - cmd.setCount_sensor(wsAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WSALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + service.executeService(client, (ReadMemoryCommand) command); + } } - } diff --git a/src/com/szpg/task/ReadWSValueTask.java b/src/com/szpg/task/ReadWSValueTask.java index 386b493..3a34dec 100644 --- a/src/com/szpg/task/ReadWSValueTask.java +++ b/src/com/szpg/task/ReadWSValueTask.java @@ -1,48 +1,51 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadWSValueCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadSensorValueService; +import com.szpg.util.Configure; public class ReadWSValueTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; + private ReadSensorValueService service; - public ReadWSValueTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + public ReadWSValueTask() { + service = new ReadSensorValueService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取甲烷参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadWSValueCommand wsCmd = (ReadWSValueCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(wsCmd.getCommandType()); - cmd.setDest(wsCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { wsCmd.getMemoryArea() })); - cmd.setStart_mem_word(wsCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(wsCmd.getStartAddress().substring(4)); - cmd.setCount_word(wsCmd.getCountWord()); - cmd.setCount_bit(wsCmd.getCountBit()); - cmd.setCount_sensor(wsCmd.getCountSensor()); - cmd.setOffset(wsCmd.getOffset()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构建命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READWSVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".WS.COUNT"))); + + // 调用服务过程执行命令发送服务 + service.executeService(client, (ReadMemoryCommand) command); + } } } diff --git a/src/com/szpg/task/ReadYWStatusTask.java b/src/com/szpg/task/ReadYWStatusTask.java index f6a733c..36b2952 100644 --- a/src/com/szpg/task/ReadYWStatusTask.java +++ b/src/com/szpg/task/ReadYWStatusTask.java @@ -1,47 +1,50 @@ package com.szpg.task; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppCommand; -import com.szpg.plc.message.command.read.ReadYWStatusCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; public class ReadYWStatusTask implements Runnable { - private ACUClient client; - private AppCommand appCommand; - - public ReadYWStatusTask(ACUClient client, AppCommand command) { - this.client = client; - this.appCommand = command; + private ReadControllerStatusService service; + + public ReadYWStatusTask() { + service = new ReadControllerStatusService(); } @Override public void run() { - DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); - byte[] content = finspi.messageToBytes(appCommand); + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); - // 发送读取爆管液位参数内存命令 - ACUClientUtil.getInstance().sendACUCommand(client, content); + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); - ReadYWStatusCommand ywAlmCmd = (ReadYWStatusCommand) appCommand; - - // 发送完成之后将命令保存在数据库中 - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setCmd_type(ywAlmCmd.getCommandType()); - cmd.setDest(ywAlmCmd.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ywAlmCmd.getMemoryArea() })); - cmd.setStart_mem_word(ywAlmCmd.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ywAlmCmd.getStartAddress().substring(4)); - cmd.setCount_word(ywAlmCmd.getCountWord()); - cmd.setCount_bit(ywAlmCmd.getCountBit()); - cmd.setCount_sensor(ywAlmCmd.getCountSensor()); - - new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); + // 构造命令对象 + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READYWSTATUS); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YWALM.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".YW.COUNT"))); + + service.executeService(client, command); + } } } diff --git a/src/com/szpg/task/ReadZmRtTask.java b/src/com/szpg/task/ReadZmRtTask.java new file mode 100644 index 0000000..881b7cb --- /dev/null +++ b/src/com/szpg/task/ReadZmRtTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerRuntimeService; +import com.szpg.util.Configure; + +public class ReadZmRtTask implements Runnable { + + private ReadControllerRuntimeService service; + + public ReadZmRtTask() { + service = new ReadControllerRuntimeService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READZMRUNTIME); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMRT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMRT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZM.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/com/szpg/task/ReadZmStatTask.java b/src/com/szpg/task/ReadZmStatTask.java new file mode 100644 index 0000000..540d3b8 --- /dev/null +++ b/src/com/szpg/task/ReadZmStatTask.java @@ -0,0 +1,49 @@ +package com.szpg.task; + +import java.util.Map; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.service.ReadControllerStatusService; +import com.szpg.util.Configure; + +public class ReadZmStatTask implements Runnable { + + private ReadControllerStatusService service; + + public ReadZmStatTask() { + service = new ReadControllerStatusService(); + } + + @Override + public void run() { + // 查找所有的client + Map clients = ACUClientUtil.getInstance().getClients(); + + for (String key : clients.keySet()) { + ACUClient client = clients.get(key); + + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READZMSTAT); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); + + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.START")), 2)) + "00"); + command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.WORDCOUNT"))); + command.setCountSensor(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZM.COUNT"))); + + service.executeService(client, command); + } + } + +} diff --git a/src/sys.properties b/src/sys.properties index 684c7f7..1a4ecb3 100644 --- a/src/sys.properties +++ b/src/sys.properties @@ -8,4 +8,7 @@ #\u672c\u673aIP\u5730\u5740 LOCALHOST.NET = 00 LOCALHOST.NODE = 6B -LOCALHOST.UNIT = 00 \ No newline at end of file +LOCALHOST.UNIT = 00 + +#\u5b9a\u671f\u6e05\u7406\u6570\u636e\u5e93\u4e2d\u8d85\u65f6\u7684\u547d\u4ee4 +MESSAGEPOOL.REFRESH_TIME = 15 \ No newline at end of file